DbCollection
Mirage 的 Db
有許多 DbCollections
,它們等同於傳統資料庫中的表格。它們儲存特定類型的資料,例如 users
和 posts
。
DbCollections
有名稱,例如 users
,您可以使用這些名稱從 Db
物件存取集合。
假設您已定義了 user
模型,並且以下資料已插入到您的資料庫中(透過工廠或 fixture)
export default [
{ id: 1, name: 'Zelda' },
{ id: 2, name: 'Link' }
];
那麼 db.contacts
將會傳回這個陣列。
方法
find(ids: any): any
如果 ids
是單個 ID,則從 collection
中傳回單個記錄;如果 ids
是 ID 的陣列,則傳回記錄的陣列。請注意,每個 ID 可以是整數或字串,但整數 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
從 collection
中傳回第一個符合 query
物件中鍵值對的模型。請注意,這裡使用的是字串比較。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 中移除一個或多個記錄。
如果 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
更新集合中的一個或多個記錄。
如果只有 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
從 collection
中返回一個模型陣列,其中模型的鍵值對與 query
物件中的鍵值對匹配。請注意,此處使用字串比較。query
是一個 POJO(Plain Old JavaScript Object)。
// Given users = [ { id: 1, name: 'Link' }, { id: 2, name: 'Zelda' } ]
db.users.where({ name: 'Zelda' }); // [ { id: 2, name: 'Zelda' } ]