模型
模型封装您的数据库,并允许您定义关系。
类方法与实例方法
下面记录的方法适用于模型的实例,但您通常会使用模式
来访问模型的类,该类可以用于查找或创建实例。
您可以在模式
API 文档中找到类方法的文档。
访问属性和关系
您可以直接从模型访问属性(字段)和关系。
user.name; // 'Sam'
user.team; // Team model
user.teamId; // Team id (foreign key)
Mirage 模型在属性方面是无模式的,但其关系模式是已知的。
例如,
let user = schema.users.create();
user.attrs // { }
user.name // undefined
let user = schema.users.create({ name: 'Sam' });
user.attrs // { name: 'Sam' }
user.name // 'Sam'
但是,如果一个用户
定义了一个帖子
关系,
let user = schema.users.create();
user.posts // returns an empty Posts Collection
属性
关联: 对象
返回此模型关联的哈希表。
let server = new Server({
models: {
user: Model,
post: Model.extend({
user: belongsTo(),
comments: hasMany()
}),
comment: Model
},
seeds(server) {
let peter = server.create("user", { name: "Peter" });
server.create("post", { user: peter });
}
});
let post = server.schema.posts.find(1)
post.associations
// {
// user: BelongsToAssociation,
// comments: HasManyAssociation
// }
查看关联类文档以了解每个关联的可用字段。
属性: 任何
返回模型的属性。
let post = schema.blogPosts.find(1);
post.attrs; // {id: 1, title: 'Lorem Ipsum', publishedAt: '2012-01-01 10:00:00'}
注意,您也可以直接从模型访问单个属性,例如帖子.标题
。
方法
销毁(): 任何
销毁数据库记录。
let post = blogPosts.find(1);
post.destroy(); // removed from the db
isNew(): 布尔值
布尔值,如果模型尚未持久化到数据库,则为 true。
let post = blogPosts.new({title: 'Lorem ipsum'});
post.isNew(); // true
post.id; // null
post.save(); // true
post.isNew(); // false
post.id; // 1
isSaved(): 布尔值
布尔值,与isNew
相反。
重新加载(): 任何
从数据库重新加载模型的数据。
let post = blogPosts.find(1);
post.attrs; // {id: 1, title: 'Lorem ipsum'}
post.title = 'Hipster ipsum';
post.title; // 'Hipster ipsum';
post.reload(); // true
post.title; // 'Lorem ipsum'
保存(): 任何
创建或保存模型。
let post = blogPosts.new({ title: 'Lorem ipsum' });
post.id; // null
post.save();
post.id; // 1
post.title = 'Hipster ipsum'; // db has not been updated
post.save(); // ...now the db is updated
toString(): 字符串
模型和 ID 的简单字符串表示。
let post = blogPosts.find(1);
post.toString(); // "model:blogPost:1"
更新(键: 字符串, 值: 字符串): 任何
更新数据库中的记录。
let post = blogPosts.find(1);
post.update('title', 'Hipster ipsum'); // the db was updated
post.update({
title: 'Lorem ipsum',
created_at: 'before it was cool'
});