使用include关联查询时required的作用
今天在写查询带有点赞数据的书籍
接口时发现漏了一些数据
Favor
表的模型:
Favor.init({
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true
},
user_id: {
type: DataTypes.UUID,
},
book_id: {
type: DataTypes.UUID,
},
isLike: {
type: DataTypes.BOOLEAN,
defaultValue:true
}
}, {
tableName: "favor",
sequelize: db,
...Model.options
})
Favor
和Book
之间的关联:
Favor.belongsTo(BookModel, {
foreignKey: "book_id",
as: "bo",
targetKey:"id"
})
BookModel.hasMany(Favor, {
foreignKey: "book_id",
as: "fa",
targetKey:"id"
})
查询代码如下:
Book.findAll({
include: [
{
model: global.model.favor,
as:"fa",
}
]
})
查询所得结果:
结果显示的书籍数目是125,也符合当前数据库中的数量,但是isLike
中有一个值为false
,因为我们没有加上where条件,接下来加上where条件.
Book.findAll({
include: [
{
model: global.model.favor,
as:"fa",
where:{
isLike:true
}
}
]
})
查询结果如下:
从上述查询结果可知,书籍数量变成了68,按照正常查询的话应该是存在125的.原因在于未被点赞过的书籍
没有被查询出来,因此我们需要加上required:false
属性把全部书籍都查询出来
Book.findAll({
include: [
{
model: global.model.favor,
as:"fa",
where:{
isLike:true
},
required:false
}
]
})
加上required:false
后,书籍数也终于变成125了!!!
这个问题真的困扰了我非常非常久!!感谢这位博主的文章sequelize 之 include 的 where 采坑记