如何在 Sequelize JS 中更新 reference_id(FK 列)中具有相同值的对象数组?
How to update array of objects with same value in reference_id (FK Column) in Sequelize JS?
我有一个对象数组,看起来像这样:
[
{
id: '5b29c08b-597c-460c-a3c7-ac8852b7a5dc',
option_text: 'njnj',
answer: false
},
{
id: '8ff5bda6-9335-495c-9c72-15ef258b899b',
option_text: 'jnjn',
answer: true
}
]
这里的 answer
列是相互关联的,就像如果对象的任何一个 answer
设置为 true
,另一个将从前端作为 false
出现。所以我必须更新与引用的 id 关联的所有行。
我面临的问题是更新查询不是 运行 但它进入代码的 then
块内部而不是抛出错误。下面是我的代码:
// UPDATE Option
exports.updateOption = (req, res, next) => {
try {
console.log(req.body);
db.Option.update(req.body, {
where: { question_id: req.params.id }
}).then(() => {
console.log('A');
return res.status(200).send(errors.UPDATED_SUCESSFULLY);
}).catch(err => {
console.log('B');
return res.status(204).send(errors.INTERNAL_SERVER);
});
} catch(err) {
console.log('C');
return res.status(204).send(errors.INTERNAL_SERVER);
}
};
示例 Table 相同的数据:
我在想的是,对于与相同 question_id
关联的所有行,首先到 answer
列 false
,然后更新具有 answer
的特定行设置为 true
。
但这是一个好方法还是任何人都可以建议我一些更好的解决方案?
您应该在同一个事务中执行所有更新(以避免数据库中的不一致):
sequelize.transaction(async transaction => {
const options = req.body;
for (const option of options) {
await db.Option.update(option, {
where: { question_id: req.params.id },
transaction
});
}
}).then(...
我有一个对象数组,看起来像这样:
[
{
id: '5b29c08b-597c-460c-a3c7-ac8852b7a5dc',
option_text: 'njnj',
answer: false
},
{
id: '8ff5bda6-9335-495c-9c72-15ef258b899b',
option_text: 'jnjn',
answer: true
}
]
这里的 answer
列是相互关联的,就像如果对象的任何一个 answer
设置为 true
,另一个将从前端作为 false
出现。所以我必须更新与引用的 id 关联的所有行。
我面临的问题是更新查询不是 运行 但它进入代码的 then
块内部而不是抛出错误。下面是我的代码:
// UPDATE Option
exports.updateOption = (req, res, next) => {
try {
console.log(req.body);
db.Option.update(req.body, {
where: { question_id: req.params.id }
}).then(() => {
console.log('A');
return res.status(200).send(errors.UPDATED_SUCESSFULLY);
}).catch(err => {
console.log('B');
return res.status(204).send(errors.INTERNAL_SERVER);
});
} catch(err) {
console.log('C');
return res.status(204).send(errors.INTERNAL_SERVER);
}
};
示例 Table 相同的数据:
我在想的是,对于与相同 question_id
关联的所有行,首先到 answer
列 false
,然后更新具有 answer
的特定行设置为 true
。
但这是一个好方法还是任何人都可以建议我一些更好的解决方案?
您应该在同一个事务中执行所有更新(以避免数据库中的不一致):
sequelize.transaction(async transaction => {
const options = req.body;
for (const option of options) {
await db.Option.update(option, {
where: { question_id: req.params.id },
transaction
});
}
}).then(...