Sequelize使用(二)

使用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
})

FavorBook之间的关联:

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 采坑记

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值