用包含关联续集 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的主要内容,如果未能解决你的问题,请参考以下文章