你可以用 DB
门面的 transaction
方法在一个事务里执行一系列操作。如果事务闭包里抛出异常,那么事务就会自动回滚。如果闭包执行成功,那么事务就会自动提交。使用 transaction
方法就无需手动回滚或者提交事务了:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
解决死锁
transaction
方法还要第二个参数可供指定——当死锁发生时,事务最大的尝试次数。一旦超过这个指定次数,就会抛出异常:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
}, 5);
手动使用事务
如果你要完全手动控制事务的回滚和提交,就要用 BD
门面的 beginTransaction
方法了:
DB::beginTransaction();
使用 rollBack
方法回滚事务:
DB::rollBack();
最后,使用 commit
方法提交事务:
DB::commit();