sequelizejs
Sequelize is a promise-based ORM for Node.js v4 and up. It supports the dialects PostgreSQL, MySQL, SQLite and MSSQL and features solid transaction support, relations, read replication and more.
分页查询
一般我们写一个分页查询可以用下面的方式。
let pagesize = 10;
let curpage = 1;
let {
Order,
OrderInfo,
} = ctx.model;
let data = await Order.findAndCountAll({
limit: pagesize,
offset: (curpage - 1) * pagesize,
where,
order: [
['created_at', 'DESC'],
],
include: [{
model: OrderInfo,
as: 'order_info',
}],
});
统计问题
在实际业务中,一个订单会有多个订单详情(具体每个商品),如上得到的 data.count
会与实际订单数据有差异。因为使用了连表查询的方式,当前的 count
会是订单详情的综合。
sequelizejs
文档中说在关联的表上加 required: false
,实际并没有。可能我没看懂文档。
后查询得知,需在 findAndCountAll
参数中添加 distinct: true
。
解决方案
let pagesize = 10;
let curpage = 1;
let {
Order,
OrderInfo,
} = ctx.model;
let data = await Order.findAndCountAll({
limit: pagesize,
offset: (curpage - 1) * pagesize,
where,
order: [
['created_at', 'DESC'],
],
include: [{
model: OrderInfo,
as: 'order_info',
}],
distinct: true,
});
转载请注明:OnlyLing - Web 前端开发者 » sequelizejs 使用 findAndCountAll、required 连表查询并统计有误