2013-09-23 8 views
5

मेरे समस्या के साथ एक ही मेज पर hasMany को hasMany काफी सरल है:SequelizeJS - एक मेज में शामिल होने

मैं उपयोगकर्ताओं नामक एक टेबल मिल गया। उन उपयोगकर्ताओं के बहुत सारे संपर्क हो सकते हैं। वे संपर्क अन्य उपयोगकर्ता हैं।

तो मैं मालिक (userID) की आईडी के साथ userHasContacts नाम के एक मेज, और संपर्क (contactID) की आईडी है।
उन दोनों विदेशी कुंजी उपयोगकर्ता तालिका का संदर्भ दे रहे हैं।

यहाँ मेरी सुंदर चित्र है:

   ---------------- 
______________|____  ____|____ 
| userHasContacts |  | users | 
-------------------  --------- 
| #userID   |  | id | 
| #contactID  |  --------- 
-------------------   | 
       |    | 
       ---------------- 

sequelize में, मेरा तर्क में, मैं लिखना होगा:

Users.hasMany(Users, {foreignKey: 'userID', joinTableName: 'userHasContacts'}); 
Users.hasMany(Users, {as: 'Contacts', foreignKey: 'contactID', joinTableName: 'userHasContacts'}); 

लेकिन यह है कि यह इस तरह से काम नहीं करता है लगता है, और यह हो गया है 2 घंटे मैं इस संबंध को लिखने के कई तरीकों की कोशिश कर रहा हूं ...

मेरे लिए काम करने वाली एकमात्र पंक्ति

Users.hasMany(UserHasContacts, {foreignKey: 'contactID', joinTableName: 'userHasContacts'}); 

UserHasContacts.findAndCountAll({ where: {userID: id} }).success(function(result) {   
    res.json(result); 
}); 

लेकिन तब मैं उपयोगकर्ताओं तालिका मेरी खोज क्वेरी में (Eager loading के माध्यम से) शामिल नहीं हो सकते और यह बस userHasContacts अंदर डेटा देता है।

अगर किसी को संकेत मिलता है, तो आपका स्वागत है!
अग्रिम धन्यवाद!

उत्तर

4

है कि आप क्या करने की कोशिश कर रहे हैं के बाद से एक स्वयं संघ आप केवल hasMany एक बार कॉल करने की आवश्यकता है, जो एक जंक्शन तालिका

User.hasMany(User, { as: 'Contacts', joinTableName: 'userHasContacts'}) 

कौन सा userHasContacts तालिका पैदा करेगा पैदा करेगा के रूप में:

CREATE TABLE IF NOT EXISTS `userHasContacts` (`userId` INTEGER , `ContactsId` INTEGER , `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`userId`,`ContactsId`)) ENGINE=InnoDB; 

उपयोगकर्ताओं और उनके संपर्कों को खोजने के लिए आप कर सकते हैं:

User.find({ where: ..., include: [{model: User, as: 'Contacts'}]}) 
संबंधित मुद्दे