2014-09-17 7 views
22

के साथ कई जंक्शन टेबल भर में शामिल हों मैं तीन प्राथमिक टेबल के साथ एक डेटाबेस है। उपयोगकर्ताओं और टीमों और टीमों और फ़ोल्डरों के बीच कई सारे संबंध हैं (एक उपयोगकर्ता एक से अधिक टीमों पर हो सकता है और टीमों में एक से अधिक फ़ोल्डर हो सकते हैं)।Sequelize

सीक्वेलिज़ उपयोगकर्ता-टीमों और टीम-फ़ोल्डर संबंधों के प्रबंधन का एक शानदार काम करता है, लेकिन मुझे उपयोगकर्ताओं और फ़ोल्डरों के बीच संबंध स्थापित करने का कोई तरीका नहीं मिल रहा है।

कच्चे एसक्यूएल का उपयोग किये बिना दो जंक्शन तालिकाओं में शामिल होने का कोई तरीका है?

इस सुंदरता या उचित संख्या में इसे पूरा करने का कोई तरीका नहीं लगता है। मैंने user.getFolders(), Folder.findAll({ include: [User] }) जैसी विधियों का प्रयास किया है, लेकिन Sequelize एक तीन स्तर पदानुक्रम को समझने में सक्षम नहीं प्रतीत होता है।

उत्तर

32

मान लिया जाये कि निम्नलिखित संबंधों:

User.belongsToMany(Team, { through: 'users_teams'}); 
Team.belongsToMany(User, { through: 'users_teams'}); 

Folder.belongsToMany(Team, { through: 'teams_folders'}); 
Team.belongsToMany(Folder, { through: 'teams_folders'}); 

आप नेस्ट का उपयोग कर एक ही बार में सब कुछ लोड करने के लिए सक्षम होना चाहिए में शामिल हैं:

User.findAll({ 
    include: [ 
    { 
     model: Team, 
     include: [ 
     Folder 
     ] 
    } 
    ] 
}); 

आप उदाहरण के साथ पहले से ही सही रास्ते पर होने लगते हैं आप अपनी पोस्ट में दिया है :)। केवल एक चीज आप को बदलने की जरूरत के बजाय include में सीधे उपयोगकर्ता मॉडल पास करने का है, तो आपको निम्न करने के लिए एक मॉडल के संपत्ति के साथ एक वस्तु और एक और नेस्ट शामिल संपत्ति

+2

शर्मनाक बात यह है कि असली मुद्दा यह है कि मुझे एहसास नहीं हुआ कि इस विधि को "उत्सुक लोडिंग" के रूप में जाना जाता था और दस्तावेज़ीकरण के उस खंड पर स्किम किया गया था। धन्यवाद! – jtschoonhoven

+0

ऐसा लगता है कि 'हैनी' का उपयोग 1: एम संबंधों के साथ किया जाना चाहिए: 'एन: एम एसोसिएशन के साथ कई समर्थित नहीं हैं। इसके बजाय subsToMany का उपयोग करें ' – jmu

+0

अपडेट किया गया, धन्यवाद @jmu :) –

3

वेतन ध्यान पारित:

  • परिभाषित में संबंधों दोनों दिशाओं
  • आप सही क्रम में foreignKey, otherKey है की जाँच करें
User.belongsToMany(Team, { 
    through: 'users_teams', 
    foreignKey: 'user_id', 
    otherKey: 'team_id' 
}); 

Team.belongsToMany(User, { 
    through: 'users_teams', 
    foreignKey: 'team_id', 
    otherKey: 'user_id' 
}); 
संबंधित मुद्दे