Sequelize Insert事务(两表多行)

Sequelize Insert transaction (two tables, multiple rows)

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

我是怎么做到的:

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_ressources 中的 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');
}

现在您仅在创建查询后才提交事务,并且您还从第一个查询中获取值以在第二个查询中使用。

注意create returns 创建的对象,所以你可以利用它