如何在 adonisjs 中使用 DB [事务、提交、回滚]

How to use DB [ transaction , comit, rollback ] in adonis js

我想将 try catch 与数据库事务一起使用,因为如果出现错误,我希望数据库回滚 try 函数中的所有查询

这是我的尝试。我评论 const empImg 因为我想测试。查询错误未知empImg

后不回滚await emp.save();
  const trx = await Database.beginTransaction()
  try {
      const user = await auth.getUser();
      const emp = new Employee();
      emp.fill(empData);
      emp.merge({ update_by: user.name  })
      await emp.save();
      // const empImg = new EmployeePhoto();
      empImg.name = user.name;
      await empImg.save();
      await trx.commit()
    } catch (error) {
      await trx.rollback()
      throw new InvalidAccessException();
    }

当然可以直接放

emp.delete(); 在 catch 中,但我必须检查哪个查询错误并将其删除。

我怎么能做这样的事情如果出现错误我想回滚我的 emp 和 empImg?

您可以将 trx 对象发送到 Lucid 函数以使用交易机制,例如await emp.save(trx);

  const trx = await Database.beginTransaction()

  try {
      const user = await auth.getUser();
      const emp = new Employee();
      emp.fill(empData);
      emp.merge({ update_by: user.name  })
      await emp.save(trx);
      // const empImg = new EmployeePhoto();
      empImg.name = user.name;
      await empImg.save(trx);
      await trx.commit()
    } catch (error) {
      await trx.rollback()
      throw new InvalidAccessException();
    }

AdonisJS Docs

中的交易