2013-09-23 10 views
5

Benim sorunum ile aynı masada hasMany için hasMany oldukça basittir:SequelizeJS - Bir katılmak masanın

Ben kullanıcıları adında bir tablo var. Bu kullanıcıların çok fazla kişisi olabilir. Bu kişiler diğer kullanıcılar.

Yani sahibine (userID) kimlikli userHasContacts adında bir tablo, ve temas (kişi kimliği) ait kimliği bulunmaz.
Her iki yabancı anahtar da kullanıcıları tablosuna başvuruyor.

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

sequelize, benim mantığında, ben yazardım: Burada

benim güzel diyagramıdır

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

Ama bu şekilde çalışmıyor gibi görünüyor ve bu oldu 2 saat Bu ilişkiyi yazmanın çeşitli yollarını deniyorum ...

Benim için çalışan tek satır

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

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

Ama sonra (Eager loading üzerinden) benim bulmak sorgusunda kullanıcılar tablo katılamaz ve sadece userHasContacts içindeki verileri döndürür.

Herhangi bir ipucu varsa, hoş geldiniz!
Önceden teşekkürler!

cevap

4

ne yapmaya çalışıyoruz userHasContacts tablo yaratacak bir kavşak tablo

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

yaratacak yalnızca bir kez hasMany aramaya gerek kendi kendine dernek olduğundan, olarak:

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

Kullanıcıları ve bağlantılarını bulmak için şunları yapabilirsiniz:

User.find({ where: ..., include: [{model: User, as: 'Contacts'}]})