モデル
モデルはデータベースをラップし、リレーションシップを定義できます。
クラスメソッド vs インスタンスメソッド
以下に記載されているメソッドはモデルのインスタンスに適用されますが、通常はSchema
を使用してモデルのクラスにアクセスします。これはインスタンスを見つけたり作成したりするために使用できます。
クラスメソッドについては、Schema
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
プロパティ
関連付け: オブジェクト
このモデルの関連付けのハッシュを返します。
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
// }
各関連付けで利用可能なフィールドを確認するには、Associationクラスのドキュメントを参照してください。
属性: 任意
モデルの属性を返します。
let post = schema.blogPosts.find(1);
post.attrs; // {id: 1, title: 'Lorem Ipsum', publishedAt: '2012-01-01 10:00:00'}
モデルから直接個々の属性にもアクセスできることに注意してください。例えば、post.title
などです。
メソッド
削除(): 任意
DBレコードを削除します。
let post = blogPosts.find(1);
post.destroy(); // removed from the db
新規作成(): ブール値
ブール値。モデルがまだ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
toString(): 文字列
モデルとIDの簡単な文字列表現。
let post = blogPosts.find(1);
post.toString(); // "model:blogPost:1"
update(key: 文字列, val: 文字列): 任意
DB内のレコードを更新します。
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'
});