Sequelize.js Sequelize:嵌套列的和值

Sequelize.js Sequelize:嵌套列的和值,sequelize.js,Sequelize.js,我试图使用sequelize v6对嵌套hasMany关系中的列的值求和。下面的代码对所有嵌套行求和,而不仅仅是对属于父记录的行求和 const StockOrders = await models.StockOrder.findAndCountAll({ limit: limit, offset: offset, order: [[orderBy, order]], include:

我试图使用sequelize v6对嵌套hasMany关系中的列的值求和。下面的代码对所有嵌套行求和,而不仅仅是对属于父记录的行求和

        const StockOrders = await models.StockOrder.findAndCountAll({
            limit: limit,
            offset: offset,
            order: [[orderBy, order]],
            include: [{
                model: models.StockOrderLine,
                attributes: [
                    [Sequelize.fn('SUM', Sequelize.col('StockOrderLines.calculatedItemQuantity')), 'itemQuantityTotal']
                ],    
                as: 'StockOrderLines'
            }],
            
        });

有人可以建议吗?

要从联接表中获取列的总和,您应该将其包含在根表的
属性中。由于不需要联接表中的任何行值(通过
include
),因此可以通过为
属性
值传入空数组来忽略它们。我倾向于根据配置值映射到的SQL部分对配置值进行排序—select、join、where、order、group、offset、limit

const StockOrders=wait models.StockOrder.findAndCountAll({
属性:[
//在此处包括求和值
[Sequelize.fn('SUM',Sequelize.col('StockOrderLines.calculatedItemQuantity')),'itemQuantityTotal']
],
包括:[{
型号:models.StockOrderLine,
//此处不包括任何列
属性:[],
as:'StockOrderLines'
}],   
订单:[[orderBy,order]],
抵销:抵销,
极限:极限,
});

我最终还是按照这一页上的建议做了

我必须使用部分原始查询,如下所示:

        const StockOrders = await models.StockOrder.findAndCountAll({
            attributes: {
                include: [
                    [
                        // Note the wrapping parentheses in the call below!
                        Sequelize.literal(`(
                            SELECT SUM(calculatedItemQuantity)
                            FROM StockOrderLines AS StockOrderLines
                            WHERE
                            StockOrderLines.stockOrderId = StockOrder.id
                        )`),
                        'itemTotal'
                    ]
                ]
            },
            order: [[orderBy, order]],
            offset: offset,
            limit: limit
        });

这就是所有人。

嘿,谢谢你的回答。不幸的是,它没有起作用。生成的SQL读作SELECT
StockOrder
*FROM(SELECT
StockOrder
,SUM(
StockOrderLines
calculatedEMQuantity
)作为
StockOrders
作为
StockOrder
orderby
StockOrder
id
ASC LIMIT 0,10)AS
StockOrder
左外连接
StockOrderLines
AS
StockOrderLines
StockOrder
id
=
StockOrderLines
订购人
id
ASC;也许是一个续集问题。。。我将在下面发布我的解决方案。再次感谢。