में अनुक्रमित करें और इसमें पोस्टग्रेएसक्यूएल डेटाबेस, अनुबंध और भुगतान पर दो टेबल हैं। एक अनुबंध में कई भुगतान किए गए हैं।समूह का उपयोग करके
मैं दो निम्नलिखित मॉडल हो रही है:
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;
};
मैं सभी हर अनुबंध के लिए किए गए भुगतान योग करने के लिए चाहते हैं, और इस समारोह का प्रयोग किया:
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']
})
लेकिन यह निम्नलिखित उत्पन्न करता है क्वेरी:
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";
मैं क्योंकि मैं इसे शामिल करने के लिए होगा, payments.id चयन करने के लिए मत पूछो मेरे समेकन या समूह द्वारा कार्यों में, जैसा कि मैंने कहा है:
Possibly unhandled SequelizeDatabaseError: error: column "payments.id" must appear in the GROUP BY clause or be used in an aggregate function
क्या मुझे यहां कुछ याद आ रही है? मैं this answer का पालन कर रहा हूं लेकिन यहां तक कि मुझे समझ में नहीं आता कि SQL अनुरोध मान्य कैसे हो सकता है।
आप के बजाय 'models.contracts.id' का मतलब है 'contracts.id' है? वैसे भी पहला मुझे एक ही त्रुटि देता है और दूसरा एक और एसक्यूएल त्रुटि फेंकता है (खंड से गायब)। – syldor