关联
关联代表模型之间的关系。
使用 hasMany 和 belongsTo 辅助函数,就可以定义关系。
import { Server, Model, hasMany, belongsTo }
new Server({
models: {
user: Model.extend({
comments: hasMany()
}),
comments: Model.extend({
user: belongsTo()
})
}
})查看 关系指南,了解有关设置关系的更多信息。
每个辅助函数的使用都会在服务器的 Schema 中注册一个关联(HasMany 关联或 BelongsTo 关联)。可以使用 schema.associationsFor() 方法或单个模型实例上的 associations 属性访问这些关联。
然后,可以对这些关联进行自省,以执行诸如在序列化器中动态构建 JSON 响应等操作。
属性
foreignKey: String
返回关联的外键的名称。
let server = new Server({
models: {
user: Model,
post: Model.extend({
fineAuthor: belongsTo("user"),
comments: hasMany()
}),
comment: Model
}
});
let associations = server.associationsFor('post')
associations.fineAuthor.foreignKey // fineAuthorId
associations.comments.foreignKey // commentIdsisPolymorphic: Boolean
返回一个布尔值,如果关联是多态的,则为 true。
例如,给定
new Server({
models: {
comment: Model.extend({
commentable: belongsTo({ polymorphic: true })
})
}
})那么
server.schema.associationsFor('comment').commentable.isPolymorphic // true查看 有关多态关联的指南,了解有关该主题的更多信息。
type: String
根据关联类型,返回字符串 "hasMany" 或 "belongsTo"。
modelName: String
关联模型的 modelName。
例如,给定以下配置
new Server({
models: {
user: Model,
comment: Model.extend({
user: belongsTo()
})
}
})关联的 modelName 将是 user。
请注意,关联的 modelName 和 name 可能不同。这是因为 Mirage 支持同一类型的多种关系。
new Server({
models: {
user: Model,
comment: Model.extend({
author: belongsTo('user'),
reviewer: belongsTo('user')
})
}
})对于这两种关系,modelName 都是 user,但第一个关联的 name 是 author,而第二个关联的 name 是 reviewer。
name: String
关联的名称,来自用于定义它的属性名称。
例如,给定以下服务器定义
new Server({
models: {
user: Model,
comment: Model.extend({
author: belongsTo('user')
})
}
})关联的 name 将是 author。
Mirage 使用该名称在模型上定义外键(在本例中为 comment.authorId),以及其他功能。
方法
isReflexive(): Boolean
返回一个布尔值,如果关联是自引用的,即模型与自身具有关联,则为 true。
例如,给定
new Server({
models: {
user: Model.extend({
friends: hasMany('user')
})
}
})那么
server.schema.associationsFor('user').friends.isReflexive // true