续集查找或创建与包含关联

sequelize findOrCreate with include association

本文关键字:包含 关联 创建 查找      更新时间:2023-09-26

使用续集,我有两个具有关联的模型:

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的一部分。 此代码将在数据库中创建新的评估记录(如果不存在),但它不会包含 User 密钥作为记录的一部分(而只是 NULL):

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

我有一个解决方法,通过添加:

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

。但是,这会导致 SQL 更新,该更新应该只是创建记录的一部分。 我相当确定应该有办法做到这一点,但在文档中找不到任何东西/所以/等等。

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