2015-03-08 12 views
6

Korzystanie sequelize, mam dwa modele ze stowarzyszeniami:sequelize findOrCreate z zawierać assoication

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

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

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

po jakiejś logiki aplikacji, mam User:

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

W tym momencie nie mogę sequelize aby powiązać użytkownika jako część Assessment.findOrCreate. Kod ten będzie utworzyć nowy rekord Assessment w bazie danych (jeśli nie istnieje), ale to będzie nie zawierać klucz użytkownika jako część zapisu (zamiast to po prostu null):

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

mam obejście działa dodając:

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

... jednak skutkuje to SQL UPDATE, które powinny być tylko elementem tworzenia rekordu. Jestem prawie pewien, że powinien być sposób, aby to zrobić, ale nie można znaleźć niczego w dokumentacji/so/etc.

Odpowiedz

2

Spróbuj: musisz ustawić odniesienie do klucza podstawowego User w utworzonej ocenie.

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