包含
声明属于关系
声明是属于关系的方法是 hasOne
User.hasOne(Book);
假如只想让用户只能有一本书,可以通过 hasOne 来声明,与 belongsTo 的区别的就是,主体模型就是 User,所以会在 User 模型上面添加 setBook、createBook、book 的一些方法和属性,并且会在 Book 表里面增加一个 userId 来建立包含关系。
谁是主体模型,就在谁上面添加方法,以 hasXXXX 开头的声明关系函数,都会把关系字段放在后面那个模型表里面。
在上一个例子中,我们添加一下 User 模型关于 Book 的一些方法
user.ts
首先声明一些方法与属性。
// interface UserInstance
Book: Sequelize.HasOneGetAssociationMixin<BookInstance>,
setBook: Sequelize.HasOneSetAssociationMixin<BookAttributes, number>,
createBook: Sequelize.HasOneCreateAssociationMixin<BookAttributes>
声明包含关系
(User as any).associate = function(this: typeof User,models){
this.hasOne(models.Book);
}
index.ts
const user = await User.findOne({
where: {id: 1},
include: [{ model: Book }]
});
console.log(user.Book);
include: [{ model: Book }]
是为了把相关的模型给查出来,也就是 Book,运行一下,就可以看到打印出了数据。
通过
belongsTo
与hasOne
实现了一对一模型关系,在 User 可以拿到 Book,在 Book 可以拿到 User,而有一点需要注意的是,你想让建立关系的字段放在哪,可以通过前面说的hasXXX
关系字段在后面的原则,先写好 hasXXX 之后在写 belongsTo 关系,这样就能避免搞不清楚关系字段在哪的问题。
0.0 Nice Work~
当前内容版权归 nodelover.me 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 nodelover.me .