DbCollection
MirageのDb
には、従来のデータベースのテーブルに相当する多数のDbCollection
があります。これらは、users
やposts
など、特定の種類のデータを格納します。
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の場合、collectionでtargetのキーと値のペアに一致するレコードをクエリし、それらをコレクションから削除します。
// 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の場合、collectionでtargetのキーと値のペアに一致するレコードをクエリし、それらの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' } ]