2015-04-16 19 views
7

Ho progetti e utenti.Come usare Sequelize appartiene a molte associazioni?

Un utente può avere molti progetti.

Un progetto può avere più utenti.

Ho provato a modellare questo con un'associazione OwnToMany.

Sul mio assistente mi ha definito le associazioni del genere:

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

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

Il mio cliente Ecco come si presenta:

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

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

Sul server l'associazione richiede una terza tabella per memorizzare l'associazione e Sequelize non sembra permettermi di includere i modelli corrispondenti da esso.

Se corro un project.find(1) con include:[user] ottengo

utente non è associato con il progetto!

Se provo a inserire il progetto dall'esempio sopra nel metodo di aggiornamento. Gli utenti attributo viene semplicemente ignorato (mi aspettavo un project.setUsers (projectUpdate.users per accadere in background).

Qual è il modo giusto per affrontare il carico e l'aggiornamento di queste associazioni?

+1

Trovo che se si impostano i modelli con [sequelize-cli] (https://www.npmjs.com/package/sequelize-cli), l'associazione diventa più facile da leggere in quanto sono inclusi nel modello stesso . Permette anche di utilizzare le migrazioni che è un vero vantaggio – swifty

risposta

13

quando si fornisce un alias (as) per l'associazione, è necessario prevedere che la comprendono pure:

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

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

Oppure si potrebbe risparmiare l'associazione:

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

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

In tal modo creerà un modello writer_of_project insieme a una tabella corrispondente nel database? Ci scusiamo per questo, ma sono preoccupato che la mia migrazione non abbia creato una tabella writer_of_project all'interno del db. Per favore consiglio .... –

Problemi correlati