2015-04-16 32 views
7

Mam projekty i użytkowników.Jak korzystać z stowarzyszeń Sequelize belongsToMany?

Użytkownik może mieć wiele projektów.

Projekt może mieć wielu użytkowników.

Próbowałem modelować to ze stowarzyszeniem belongsToMany.

na moim serwerze zdefiniowałem skojarzenia tak:

user.belongsToMany(project, { 
    through: 'writer_of_project' 
    foreign-key: 'user' 
    as: \projects 
}); 

project.bbelongsToMany(user, { 
    through: 'writer_of_project' 
    foreign-key: 'project' 
    as: 'writers' 
}); 

Na moim klientem to wygląda następująco:

user: { 
    id:  1, 
    ... 
    projects: [1,2,3] 
} 

project: { 
    id:  1, 
    ... 
    writers: [1,4,5] 
} 

Na serwerze stowarzyszenie wymaga trzecią tabelę do przechowywania stowarzyszenie i Sequelize nie pozwala mi na dołączenie do niego odpowiednich modeli.

Gdybym uruchomić project.find(1) z include:[user] uzyskać

użytkownik nie jest związany z projektem!

Jeśli próbuję umieścić projekt z powyższego przykładu w metodzie aktualizacji. Użytkownikom atrybut jest po prostu ignorowana (Spodziewałem się project.setUsers (projectUpdate.users się wydarzyć w tle).

Co jest właściwym sposobem radzenia sobie z załadunkiem i aktualizowania tych skojarzeń?

+1

Uważam, że jeśli skonfigurujesz swoje modele za pomocą [sequelize-cli] (https://www.npmjs.com/package/sequelize-cli), skojarzenie stanie się łatwiejsze do odczytania, ponieważ są one zawarte w samym modelu . Pozwala również na korzystanie z migracji, które jest prawdziwym bonusem. – swifty

Odpowiedz

13

gdy podasz aliasu (as) do związku, trzeba zapewnić, że do obejmują także:

project.belongsToMany(user, { 
    through: 'writer_of_project' 
    foreign-key: 'project' 
    as: 'writers' 
}); 

project.find({ 
    where: { id: 1 }, 
    include: [ { model: User, as: 'writers' } ] 
}); 

Albo można zapisać stowarzyszenie:

Project.writersAssociation = project.belongsToMany(user, { 
    through: 'writer_of_project' 
    foreign-key: 'project' 
    as: 'writers' 
}); 

project.find({ 
    where: { id: 1 }, 
    include: [ project.writersAssociation ] 
}); 
+0

Czy w ten sposób stworzysz model pisarza_projektu wraz z odpowiednią tabelą w bazie danych? Przepraszam, że chciałem to powtórzyć, ale obawiam się, że moja migracja nie spowodowała utworzenia tabeli writer_of_project w bazie danych. Proszę o poradę .... –