模型
模型包裹您的資料庫,並允許您定義關係。
類別方法與實例方法
以下文件記錄的方法適用於模型的實例,但您通常會使用 綱要
來存取模型類別,可用於尋找或建立實例。
您可以在綱要
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'
但是,如果 user
定義了 posts
關係,
let user = schema.users.create();
user.posts // returns an empty Posts Collection
屬性
associations: 物件
傳回此模型關聯的雜湊表。
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
// }
請參閱關聯類別的文件,以查看每個關聯可用的欄位。
attrs: 任何
傳回您的模型的屬性。
let post = schema.blogPosts.find(1);
post.attrs; // {id: 1, title: 'Lorem Ipsum', publishedAt: '2012-01-01 10:00:00'}
請注意,您也可以直接從模型存取個別屬性,例如 post.title
。
方法
銷毀(): 任何
銷毀資料庫記錄。
let post = blogPosts.find(1);
post.destroy(); // removed from the db
是新的(): 布林值
布林值,如果模型尚未持久化到資料庫,則為 true。
let post = blogPosts.new({title: 'Lorem ipsum'});
post.isNew(); // true
post.id; // null
post.save(); // true
post.isNew(); // false
post.id; // 1
已儲存(): 布林值
布林值,與 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
轉為字串(): 字串
模型和 ID 的簡單字串表示。
let post = blogPosts.find(1);
post.toString(); // "model:blogPost:1"
update(key: 字串, val: 字串): 任何
更新資料庫中的記錄。
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'
});