gpt4 book ai didi

javascript - 使用 Sequelize 更新关联表数据的工作示例?

转载 作者:行者123 更新时间:2023-12-03 05:17:28 31 4
gpt4 key购买 nike

这是我的模型:

var Vote = sequelize.define('vote', {
title: {
type: Sequelize.STRING,
allowNull: false
},
description: {
type: Sequelize.TEXT
}
});

var Choice = sequelize.define('choice', {
choiceTitle: {
type: Sequelize.STRING,
allowNull: false
},
count: {
type: Sequelize.INTEGER,
length: 6
}
});
Choice.belongsTo(Vote);
Vote.hasMany(Choice, {onUpdate: 'cascade'});

下面是更新“投票”表的代码,如果可能的话,使用“store()”的“投票”参数更新“投票”表,包括关联的“选择”表,该参数已经是投票的对象,其更新值包括来自应用程序。

store(vote, callback) {
return Vote.findById(vote.id, {
include: [
{
model: Choice,
as: 'choices'
}
]
}).then(function(resVote) {
resVote.choices[0].updateAttributes({count: 120}) // just to test if at least it gets written to db
.then(function(res) {
callback(null, res);
}).catch((err) => callback(err, null));
});
},

仅供引用:在代码中,我只是将特定选择的一个属性设置为 120,只是为了看看它是否被写在 postgres-db 中,万岁,这有效(感谢 Jan Aagaard 在 Updating attributes in associated models using Sequelize 上的回复)至少有关联表的更新)。

我并没有真正在 Sequelize 的文档中找到解决方案(至少他们有一些)。当我尝试直接“save()”、“update()”或“upsert()”投票时,如果允许 null,它只会创建一个带有空字段的全新行,或者如果不允许 null,则只会失败。

更新表的所有(已更改)字段以及 Sequelize 中的关联表(如果可能)的推荐方法是什么?抱歉,如果这个问题有点基本,但我现在很困惑,没有找到此任务的明确答案。

最佳答案

您可以传递 include obj 来创建(请参阅 http://sequelize.readthedocs.io/en/v3/docs/associations/ 上的“使用关联创建”下的内容),但您似乎无法通过更新来执行此操作。

我认为您想要做的是使用 Sequelize 为您提供的关系访问器获取相关记录并更新这些实例:

 Vote.findById(vote.id)
.then(function(vote) {
return vote.getChoices()
})
.then(function(choices) {
return choices[0].update({ count: 120 })
})
.then(function(choice) {
callback(null, choice);
})
.catch(function(err) {
callback(err);
});

(I realise this means you lose the join and end up with two separate queries, but I can't think another way of doing this just now)

关于javascript - 使用 Sequelize 更新关联表数据的工作示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41547815/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com