Sequelize Insert事务(两个表,多行)



两个表:post和post_resources。我想要实现的逻辑:每当我向post表中添加数据时,我都希望使用PostId 的相同外键向post_resources表中添加资源

我是怎么做的:

const post = {
name: req.body.title,
description: req.body.description,
}
try {
const result = await sq.transaction(async (t) => {
await Post.create(post, { transaction: t })
.then(async data => {
await PostResources.create({
PostId: data.id,
name: req.body.title,
url: req.body.url,
}, { transaction: t })
})
});
res.status(200).json(result)
} catch (error) {
console.log(error || 'Error occured in transaction');
}

Ps:url是要插入到post_ressosources中的url数组,以及相同的PostId!重要

请随时询问任何进一步的细节,谢谢

您同时使用了awaitthen,这是一个错误,因为它们相似

您的错误表明您已经提交了交易,因此解决方案如下:

const post = {
name: req.body.title,
description: req.body.description,
}
const t = await sequelize.transaction();
try {
const resultPost = await Post.create(post, { transaction: t })
const resultPostResources = await PostResources.create({
PostId: resultPost.id,
name: req.body.title,
url: req.body.url,
}, {transaction: t})
await t.commit();
res.status(200).json(result)
}catch (error) {
console.log(error || 'Error occured in transaction');
}

现在,您只在两个Creation查询之后提交事务,并且还可以从第一个查询中获得要在第二个查询中使用的值

注意,create返回创建的对象,因此您可以使用它

最新更新