Sequelize中的findAndCountAll
方法,这个方法会查出列表记录,同时返回符合查询列表数据的条数。
// result.count for findAndCountAll is incorrect with include
const order = await this.OrderModel.findAndCountAll({
include: [this.ctx.model.Customer, this.ctx.model.Test],
limit: pageSize,
offset: offset,
order: [["updatedAt", "desc"]],
});
上面这个sql执行之后的结果count:8
,但是我把include
条件去掉,count
就变成了6。
我order表里面也确实只有6条数据。那count:8
是怎么来的呢?
order表与test表是一对多的关系,所以,count:8
是将test的数据进行了join,所以导致count结果不准确
解决方法:
const order = await this.OrderModel.findAndCountAll({
include: [this.ctx.model.Customer, this.ctx.model.Test],
limit: pageSize,
offset: offset,
order: [["updatedAt", "desc"]],
distinct: true, //去重,返回的 count 把 include 的数量算进去
});