2015-03-08 23 views
6

dahil, iki derneklerle modelleri var: bazı uygulama mantığı sonrasequelize findOrCreate assoication sequelize kullanma

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

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

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

, bir User var: Bu noktada

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

, ben sequelize alamayan Kullanıcıyı bir Assessment.findOrCreate'un parçası olarak ilişkilendirmek. (Bir yoksa) Bu kod veritabanında yeni Değerlendirme kayıt yaratacak, ama (yerine bu sadece NULL) kaydının bir parçası olarak o Kullanıcı anahtarı içermez olacaktır:

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

Ben bir çözüm ekleyerek çalışma vardır:

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

... Ancak bu sadece kaydı oluşturarak parçası olmalıdır SQL UPDATE sonuçlanır. Bunu yapmanın bir yolu olması gerektiği konusunda kesin olarak eminim, ancak dokümanlar/öylesine/vb.

cevap

2

Bunu deneyin: Oluşturulan değerlendirmeye User birincil anahtar referansını ayarlamanız gerekir.

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