最新消息:看到那些跳动的图片、文字了吗?点击点击 O(∩_∩)O~~

sequelizejs 使用 findAndCountAll、required 连表查询并统计有误

开发工具 onlyling 17191浏览

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 连表查询并统计有误