模型

模型封装您的数据库,并允许您定义关系。

类方法与实例方法

下面记录的方法适用于模型的实例,但您通常会使用模式来访问模型的,该类可以用于查找或创建实例。

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