Sequelize.js Sequelize:嵌套列的和值
我试图使用sequelize v6对嵌套hasMany关系中的列的值求和。下面的代码对所有嵌套行求和,而不仅仅是对属于父记录的行求和Sequelize.js Sequelize:嵌套列的和值,sequelize.js,Sequelize.js,我试图使用sequelize v6对嵌套hasMany关系中的列的值求和。下面的代码对所有嵌套行求和,而不仅仅是对属于父记录的行求和 const StockOrders = await models.StockOrder.findAndCountAll({ limit: limit, offset: offset, order: [[orderBy, order]], include:
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读作SELECTStockOrder
*FROM(SELECTStockOrder
,SUM(StockOrderLines
calculatedEMQuantity
)作为StockOrders
作为StockOrder
orderbyStockOrder
id
ASC LIMIT 0,10)ASStockOrder
左外连接StockOrderLines
ASStockOrderLines
在StockOrder
上id
=StockOrderLines
订购人id
ASC;也许是一个续集问题。。。我将在下面发布我的解决方案。再次感谢。