कई मुद्दे हैं। मैं उन्हें क्रमिक रूप से संबोधित करने का प्रयास करूंगा।
1) मॉडल डिफ़ॉल्ट रूप से, यदि आप primaryKey
घोषित नहीं करते हैं , फिर सीक्वेलाइज़ स्वचालित रूप से एक id
जोड़ता है आपके लिए कॉलम। इस प्रकार legId
उपयोगी कॉलम नहीं है।
इसके अलावा, यदि आप किसी मॉडल को संबद्ध करते हैं, तो foreignKey
आपके लिए संदर्भ जोड़ा गया है, इस प्रकार pawId
घोषित नहीं किया जाना चाहिए।
इस प्रकार Legs.js
संशोधित किया जाना चाहिए:
module.exports = (sequelize, DataTypes) => {
var Leg = sequelize.define('Leg', {
originalValue: DataTypes.JSON,
newValue: DataTypes.JSON,
objectId: DataTypes.INTEGER // not entirely sure what this is
})
Leg.associate = function (models) {
// associations
}
return Leg
}
उपरोक्त मुझे pgAdmin
में निम्नलिखित कॉलम देता है :
2) संघ
निम्नलिखित संबद्धता का कोई मतलब नहीं है, और चाहिए त्रुटि उत्पन्न करें:
Leg.hasOne(Paw)
Paw.hasMany(Leg)
Unhandled rejection Error: Cyclic dependency found. Legs is dependent of itself.
Dependency chain: Legs -> Paws => Legs
प्रत्येक Leg
एक Paw
होना चाहिए , और इस प्रकार मैं निम्नलिखित का सुझाव देता हूं:
Leg.associate = function (models) {
// Leg.belongsTo(models.Cat)
Leg.hasOne(models.Paw, {
foreignKey: 'pawId',
as: 'paw'
})
}
Paw.associate = function (models) {
Paw.belongsTo(models.Leg, {
as: 'leg' // note this changed to make more sense
foreignKey: 'pawId'
})
}
3) विदेशी कुंजी
Leg.belongsTo(models.Cat, {
foreignKey: 'catId', // this should match
onDelete: 'CASCADE'
})
Cat.hasMany(models.Leg, {
foreignKey: 'catId', // this should match
as: 'legs'
})
4) उत्सुक लोड हो रहा है
नेस्टेड संघों को लोड करने के लिए उत्सुक होने पर, आपको include
उन्हें। आपको as
. का भी उपयोग करना चाहिए उपनाम जो आपके मॉडल संघों से मेल खाता है:
Cat.findAll({
include: [{
model: Leg,
as: 'legs', // Cat.legs
include: [{
model: Paw,
as: 'paw' // Leg.paw instead of Leg.pawId
}]
}]
})
इस संपूर्ण सेटअप और उपरोक्त क्वेरी का उपयोग करके, मुझे यह प्राप्त होता है:
[
{
"id": 1,
"userId": "1",
"createdAt": "2018-04-15T11:22:59.888Z",
"updatedAt": "2018-04-15T11:22:59.888Z",
"legs": [
{
"id": 1,
"originalValue": null,
"newValue": null,
"objectId": null,
"createdAt": "2018-04-15T11:22:59.901Z",
"updatedAt": "2018-04-15T11:22:59.901Z",
"catId": 1,
"paw": {
"id": 1,
"pawType": null,
"createdAt": "2018-04-15T11:22:59.906Z",
"updatedAt": "2018-04-15T11:22:59.906Z",
"pawId": 1
}
}
]
}
]
अतिरिक्त
क्योंकि यह स्पष्ट रूप से एक अभ्यास सेटअप है, आप Paw
. को संशोधित कर सकते हैं एक belongsToMany
. होना संबंध (शायद आपने बिल्लियों को पंजा से जोड़ा है?) इस प्रकार है:
Paw.associate = function (models) {
Paw.belongsToMany(models.Leg, {
foreignKey: 'pawId',
through: 'PawLegs // a through join table MUST be defined
})
}
आपने जो शुरू में कोशिश की थी, उसे लागू करने का यह सही तरीका होगा
Leg.hasOne(paw)
paw.hasMany(leg)