【问题标题】:sequelize findOrCreate with include association用包含关联续集 findOrCreate
【发布时间】:2015-05-10 01:59:27
【问题描述】:

使用 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
});

此时,我无法将用户关联为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 中找到任何内容。

【问题讨论】:

    标签: javascript express sequelize.js


    【解决方案1】:

    试试这个:您需要将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
    });
    

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 1970-01-01
      • 2018-06-07
      • 2015-03-26
      • 1970-01-01
      • 2013-05-27
      • 2017-05-30
      • 2019-02-12
      相关资源
      最近更新 更多