2013-04-02 7 views
11

Sono nuovo di Sequelize e sto cercando di capire come devo modellare la relazione uno-a-molti.Come modellare l'associazione uno a molti in sequelize?

Il mio problema è il seguente: un termine, molti documenti.

var Term = sequelize.define('Term', ...); 
var Paper = sequelize.define('Paper', ...); 

Supponiamo di avere un termine. Ogni termine può avere molti documenti e vorrei aggiungere/rimuovere documenti per il mio mandato. Mi piacerebbe anche avere tutti i documenti per il termine.

var term; 
... 
term.getPapers(...); 
term.setPapers(...); 
term.addPaper(paper); 
term.removePaper(paper); 

Ora, supponiamo di avere un foglio. Mi piacerebbe ottenere/impostare il termine per il mio articolo.

var paper; 

... 

paper.getTerm(); 
paper.setTerm(); 

Come può essere ottenuto utilizzando il sequelize? Ho studiato documenti per ore e anche alla ricerca di alcune colle in rete, ma senza risultati. Trovo questo tipo di associazione molto poco documentato in sequelize (uno a uno e molti a molti sono molto meglio).

Aggiornamento:

Va bene, parecchie ore più tardi ho lavorato come funziona:

Term.hasMany(Paper, { as: 'papers' }); 
Paper.hasOne(Term); 

Ora possiamo fare:

term.addPaper(paper); 
term.removePaper(paper); 

paper.getTerm() 
    .success(function(term) 
    { 
    ... 
    }); 
paper.setTerm(term); 

ho sono abituato a Django, e sembra che Sequelize sia FAR meno maturo, sia in termini di codice che di documentazione ...

+1

Sono d'accordo, le associazioni di Sequelize sono estremamente contro-intuitivo per me e la documentazione non aiuta. grazie per aver postato questo. –

+3

Sei sicuro che 'Paper.hasOne()' è un tipo di associazione corretto in questo caso? Non dovresti usare 'Paper.belongsTo()'? Ciò ha più senso secondo i documenti. –

+0

Non sono d'accordo perché non penso che il one-to-one e il many-to-many siano migliori .. La documentazione è così strana. Non spiega nemmeno i parametri e restituisce i valori dei metodi creati dalle associazioni. grazie per aver postato questo. : D (Dopo qualche lettura, ora penso che @SlavaFominII abbia probabilmente ragione) – SCLeo

risposta

2

dipende da come è stato strutturato il database, questo farebbe pensare ..

paper.hasOne(term,{as:"PaperTerm"}) 
3

Prima di tutto bisogna creare l'associazione. Hai fatto in modo corretto:

Term.hasMany(Paper, { as: 'papers' }); 
    Paper.hasOne(Term); 

poi si deve sincronizzare questo dichiarazioni:

sequelize.sync(); 

E ora persistono i dati. È necessario salvare gli oggetti prima di associarli.

term.create()... 
    paper1.create()... 
    paper2.create()... 

    term.setPapers([paper1, paper2]).success(function() { 
    // saved! 
    }) 

Riferimento: http://docs.sequelizejs.com/en/1.7.0/docs/associations/#many-to-many-associations

Problemi correlati