Tôi có hai bảng trên cơ sở dữ liệu, hợp đồng và thanh toán PostgreSQL. Một hợp đồng đã thực hiện nhiều khoản thanh toán.Sử dụng nhóm theo và tham gia trong phần tiếp theo
Tôi đang gặp hai mô hình sau:
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;
};
Tôi muốn tổng hợp tất cả các khoản thanh toán được thực hiện cho tất cả các hợp đồng và sử dụng chức năng này:
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']
})
Nhưng nó tạo ra như sau truy vấn:
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";
Tôi không yêu cầu chọn thanh toán.id, vì tôi sẽ phải bao gồm nó trong tập hợp hoặc nhóm của tôi theo chức năng, như đã nói trong lỗi tôi có:
Possibly unhandled SequelizeDatabaseError: error: column "payments.id" must appear in the GROUP BY clause or be used in an aggregate function
Tôi có thiếu gì đó ở đây không? Tôi đang theo dõi this answer nhưng ngay cả ở đó tôi cũng không hiểu cách yêu cầu SQL có thể hợp lệ.
Ý của bạn là 'contracts.id' thay vì 'models.contracts.id'? Dù sao cái đầu tiên mang lại cho tôi cùng một lỗi và cái thứ hai ném một lỗi SQL khác (thiếu mệnh đề FROM). – syldor