2015-03-08 10 views
6

Utilizzando sequelize, ho due modelli con le associazioni:sequelize findOrCreate con includono assoication

var Assessment = sequelize.define("Assessment", { 
    name: DataTypes.STRING 
}); 

var User = sequelize.define("User", { 
    sid: DataTypes.STRING 
}); 

Assessment.belongsTo(User); 
User.hasMany(Assessment); 

Dopo un po 'la logica dell'applicazione, ho un User:

User.findOrCreate({ where: {sid: "123"} }).spread(function (user, created) { 
    // user is a User 
}); 

A questo punto, non posso ottenere sequelize associare l'utente come parte di un Assessment.findOrCreate. Questo codice crea un nuovo record di valutazione nel database (se uno non esiste), ma sarà non includere la chiave utente come parte del record (invece è solo NULL):

Assessment.findOrCreate({ 
    where: { }, 
    include: [ { model: User, where: user.primaryKeyValues } ] 
}).spread(function (assessment, created) { 
    // ... 
}); 

ho una soluzione di lavoro aggiungendo:

assessment.setUser(user).then(function(assessment) { 
    ... 
}); 

... tuttavia, questo si traduce in un aggiornamento di SQL che dovrebbe essere solo parte della creazione del record. Sono abbastanza sicuro che ci dovrebbe essere un modo per farlo, ma non riesco a trovare nulla nei documenti/così/etc.

risposta

2

Provare questo: è necessario impostare il riferimento della chiave primaria User nella valutazione creata.

Assessment.findOrCreate({ 
    where: { UserId: user.id }, 
    include: [ User ] 
}).spread(function (assessment, created) { 
    // assessment should contain a User property with the previously found/created user 
});