syl*_*dor 25 sql postgresql node.js sequelize.js
我在PostgreSQL数据库上有两个表,合同和付款.一份合同已完成多笔付款.
我有以下两种型号:
module.exports = function(sequelize, DataTypes) {
var contracts = sequelize.define('contracts', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true
}
}, {
createdAt: false,
updatedAt: false,
classMethods: {
associate: function(models) {
contracts.hasMany(models.payments, {
foreignKey: 'contract_id'
});
}
}
});
return contracts;
};
module.exports = function(sequelize, DataTypes) {
var payments = sequelize.define('payments', {
id: {
type: DataTypes.INTEGER,
autoIncrement: true
},
contract_id: {
type: DataTypes.INTEGER,
},
payment_amount: DataTypes.INTEGER,
}, {
classMethods: {
associate: function(models) {
payments.belongsTo(models.contracts, {
foreignKey: 'contract_id'
});
}
}
});
return payments;
};
Run Code Online (Sandbox Code Playgroud)
我想总结为每份合同支付的所有款项,并使用此功能:
models.contracts.findAll({
attributes: [
'id'
],
include: [
{
model: models.payments,
attributes: [[models.sequelize.fn('sum', models.sequelize.col('payments.payment_amount')), 'total_cost']]
}
],
group: ['contracts.id']
})
Run Code Online (Sandbox Code Playgroud)
但它会生成以下查询:
SELECT "contracts"."id", "payments"."id" AS "payments.id", sum("payments"."payment_amount") AS "payments.total_cost"
FROM "contracts" AS "contracts"
LEFT OUTER JOIN "payments" AS "payments" ON "contracts"."id" = "payments"."contract_id" GROUP BY "contracts"."id";
Run Code Online (Sandbox Code Playgroud)
我没有要求选择payments.id,因为我必须按功能将它包含在我的聚合或组中,如我所犯的错误中所述:
可能未处理的SequelizeDatabaseError:错误:列"payments.id"必须出现在GROUP BY子句中或用于聚合函数
我在这里错过了什么吗?我正在按照这个答案,但即使在那里我也不明白SQL请求是如何有效的.
syl*_*dor 23
此问题已在Sequelize 3.0.1上修复,必须排除所包含模型的主键
attributes: []
Run Code Online (Sandbox Code Playgroud)
并且必须在主模型上完成聚合(此github问题中的信息).
因此,对于我的用例,代码如下
models.contracts.findAll({
attributes: ['id', [models.sequelize.fn('sum', models.sequelize.col('payments.payment_amount')), 'total_cost']],
include: [
{
model: models.payments,
attributes: []
}
],
group: ['contracts.id']
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22119 次 |
| 最近记录: |