用包含关联续集 findOrCreate

Posted

技术标签:

【中文标题】用包含关联续集 findOrCreate【英文标题】:sequelize findOrCreate with include association 【发布时间】: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 中找到任何内容。

【问题讨论】:

【参考方案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
);

【讨论】:

以上是关于用包含关联续集 findOrCreate的主要内容,如果未能解决你的问题,请参考以下文章

续集包含关联不起作用(graphql)

如何在node.js中拥有多个关联/条件/包含在findAll上的续集

续集限制包括关联

续集关联 On 或 ON

续集在关联模型上的位置

续集选择并包含另一个表别名