DbCollection

MirageのDbには、従来のデータベースのテーブルに相当する多数のDbCollectionがあります。これらは、userspostsなど、特定の種類のデータを格納します。

DbCollectionには、usersのような名前があり、これを使用してDbオブジェクトからコレクションにアクセスします。

たとえば、userモデルが定義されていて、次のデータが(ファクトリまたはフィクスチャを介して)データベースに挿入されているとします。

export default [
  { id: 1, name: 'Zelda' },
  { id: 2, name: 'Link' }
];

すると、db.contactsはこの配列を返します。

メソッド

find(ids: any): any

idsが単一のIDの場合はcollectionから単一のレコードを返し、idsがIDの配列の場合はレコードの配列を返します。各IDはintまたは文字列にできますが、文字列としての整数ID(たとえば、文字列「1」)は整数として扱われることに注意してください。

// Given users = [{id: 1, name: 'Link'}, {id: 2, name: 'Zelda'}]

db.users.find(1);      // {id: 1, name: 'Link'}
db.users.find([1, 2]); // [{id: 1, name: 'Link'}, {id: 2, name: 'Zelda'}]

findBy(query: any): any

queryオブジェクトのキーと値のペアに一致する、collectionの最初のモデルを返します。文字列比較が使用されることに注意してください。queryはPOJOです。

// Given users = [ { id: 1, name: 'Link' }, { id: 2, name: 'Zelda' } ]
db.users.findBy({ name: 'Link' }); // { id: 1, name: 'Link' }

firstOrCreate(query: any, attributesForCreate: any): any

collectionで指定されたqueryに一致する最初のレコードを検索するか、queryとオプションのattributesForCreateのマージを使用して新しいレコードを作成します。

多くの場合、APIスタブには次のようなパターンがあります。

// Given users = [
//   { id: 1, name: 'Link' },
//   { id: 2, name: 'Zelda' }
// ]

// Create Link if he doesn't yet exist
let records = db.users.where({ name: 'Link' });
let record;

if (records.length > 0) {
  record = records[0];
} else {
  record = db.users.insert({ name: 'Link' });
}

これを以下のように置き換えることができます。

let record = db.users.firstOrCreate({ name: 'Link' });

attributesForCreateを使用した拡張例

let record = db.users.firstOrCreate({ name: 'Link' }, { evil: false });

insert(data: any): any

dataをコレクションに挿入します。dataは単一のオブジェクトまたはオブジェクトの配列にすることができます。挿入されたレコードを返します。

// Insert a single record
let link = db.users.insert({ name: 'Link', age: 173 });

link;  // { id: 1, name: 'Link', age: 173 }

// Insert an array
let users = db.users.insert([
  { name: 'Zelda', age: 142 },
  { name: 'Epona', age: 58 },
]);

users;  // [ { id: 2, name: 'Zelda', age: 142 }, { id: 3, name: 'Epona', age: 58 } ]

remove(target: any): any

collection内の1つ以上のレコードを削除します。

targetが未定義の場合、すべてのレコードを削除します。targetが数値または文字列の場合、targetをIDとして使用して単一のレコードを削除します。targetがPOJOの場合、collectiontargetのキーと値のペアに一致するレコードをクエリし、それらをコレクションから削除します。

// Given users = [
//   {id: 1, name: 'Link'},
//   {id: 2, name: 'Zelda'}
// ]

db.users.remove(); // db.users = []
db.users.remove(1); // db.users = [{id: 2, name: 'Zelda'}]
db.users.remove({name: 'Zelda'}); // db.users = [{id: 1, name: 'Link'}]

update(target: any, attrs: any): any

コレクション内の1つ以上のレコードを更新します。

attrsのみが引数として存在する場合、attrsのキーと値のペアに従ってコレクション内のすべてのレコードを更新します。

targetが存在する場合、更新をtargetに一致するものに制限します。targetが数値または文字列の場合、IDがtargetである単一のレコードを見つけて更新します。targetがPOJOの場合、collectiontargetのキーと値のペアに一致するレコードをクエリし、それらのattrsを更新します。

更新されたレコードを返します。

// Given users = [
//   {id: 1, name: 'Link'},
//   {id: 2, name: 'Zelda'}
// ]

db.users.update({name: 'Ganon'}); // db.users = [{id: 1, name: 'Ganon'}, {id: 2, name: 'Ganon'}]
db.users.update(1, {name: 'Young Link'}); // db.users = [{id: 1, name: 'Young Link'}, {id: 2, name: 'Zelda'}]
db.users.update({name: 'Link'}, {name: 'Epona'}); // db.users = [{id: 1, name: 'Epona'}, {id: 2, name: 'Zelda'}]

where(query: any): any

queryオブジェクトのキーと値のペアに一致する、collectionのモデルの配列を返します。文字列比較が使用されることに注意してください。queryはPOJOです。

// Given users = [ { id: 1, name: 'Link' }, { id: 2, name: 'Zelda' } ]

db.users.where({ name: 'Zelda' }); // [ { id: 2, name: 'Zelda' } ]