如何在 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();
}
中的交易
我想将 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();
}
中的交易