模型

模型包裹您的資料庫,並允許您定義關係。

類別方法與實例方法

以下文件記錄的方法適用於模型的實例,但您通常會使用 綱要 來存取模型類別,可用於尋找或建立實例。

您可以在綱要 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'
});