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

18,005次阅读
一条评论

共计 851 个字符,预计需要花费 3 分钟才能阅读完成。

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,
});

正文完
 0
评论(一条评论)
验证码
2019-02-28 14:23:01 回复

柔柔弱弱若若若若若若若若若

 Macintosh  Chrome  中国河南省郑州市电信