sequelize findOrCreate with include association

时间:2015-03-08 23:21:12

标签: javascript express sequelize.js

使用sequelize,我有两个关联模型:

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

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

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

在一些应用程序逻辑之后,我有一个User

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

此时,我无法将sequelize与用户关联为Assessment.findOrCreate的一部分。此代码将在数据库中创建一个新的评估记录(如果不存在),但将用户密钥作为记录的一部分包含在内(而不是它只是NULL):

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

我有一个解决方法,可以添加:

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

...但是,这导致SQL UPDATE应该只是创建记录的一部分。我相当肯定应该有办法做到这一点,但无法在docs / so / etc中找到任何东西。

1 个答案:

答案 0 :(得分:3)

试试这个:您需要将User主键引用设置为创建的评估。

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