DbCollection
Mirage 的 Db
拥有许多 DbCollections
,它们等同于传统数据库中的表格。它们存储特定类型的数据,例如 users
和 posts
。
DbCollections
有名称,例如 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
返回 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。
// Given users = [ { id: 1, name: 'Link' }, { id: 2, name: 'Zelda' } ]
db.users.where({ name: 'Zelda' }); // [ { id: 2, name: 'Zelda' } ]