我目前正在使用Sequelize,无法确定将两个表关联在一起时如何更新批量。我有以下内容:
表格:
members
user_id
channel_id
all
activities
user_id
channel_id
当user_ids匹配,members.all
为2而members.channel_id
不是2时,我正在尝试更新activities.channel_id
。
这里正在使用Postgresql:
UPDATE members AS m
SET "all" = true
FROM activities AS a
WHERE m.user_id = a.user_id
AND m.channel_id = 2
AND a.current_channel != 2;
这可能是续集吗?如何在我的当前更新中包含a.current_channel != 2
?
Member.update(
{ all: true },
{ where: { channel_id: channelId } },
)
当我尝试添加包含项时,它不起作用。
答案 0 :(得分:1)
我认为您无法使用Sequelize update
方法来做类似的事情。我会在findAll
方法中使用include选项,但是据我在documentation上看到的,update
方法没有include选项。
您可以使用原始查询直接使用该查询。
sequelize.query("UPDATE members AS m SET "all" = true FROM activities AS a WHERE m.user_id = a.user_id AND m.channel_id = 2 AND a.current_channel != 2").spread((results, metadata) => {
// Results will be an empty array and metadata will contain the number of affected rows.
});
答案 1 :(得分:0)
通常,我会使用此技巧
models.findAll({
where: {
// which models to update
}
}).then(targets => {
models.target.update({
// your updates
},{
where : {
target_primary_key: targets.map(t => t.primary_key)
}
})
})