最简单的方式是使用 transaction 方法操作数据库事务,当闭包中的代码发生异常会自动回滚,例如:
注意在事务操作的时候,确保你的数据库连接使用的是同一个。
Db::transaction(function () {
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
});
可以支持MySQL的XA事务用于实现全局(分布式)事务,你可以使用:
Db::transactionXa(function () {
Db::connect('db1')->table('think_user')->delete(1);
Db::connect('db2')->table('think_user')->delete(1);
}, [Db::connect('db1'),Db::connect('db2')]);
下面是我经常使用的code
use think\facade\Db;
// 启动事务
Db::startTrans();
try {
$data=[];
$moneyinfo = new Students();
$result = $moneyinfo->insertAll($data);
if (!$result) {
throw new \Exception('插入数据失败!');
}
// 提交事务
Db::commit();
return json(['msg'=>'处理成功','status'=>200]);
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return json(['msg'=>'处理失败,'.$e->getMessage(),'status'=>400]);
}
本文共 个字数,平均阅读时长 ≈ 分钟,您已阅读:0时0分0秒。
649494848