laravel 6 数据库事务

数据库事务

你可以使用 DB facade 的 transaction 方法在数据库事务中运行一组操作。如果事务的闭包 Closure 中出现一个异常,事务将会回滚。如果事务闭包 Closure 执行成功,事务将自动提交。一旦你使用了 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);
手动使用事务
如果你想要手动开始一个事务,并且对回滚和提交能够完全控制,那么你可以使用 DB Facade 的 beginTransaction 方法:

DB::beginTransaction();
你可以使用 rollBack 方法回滚事务:

DB::rollBack();
最后,你可以使用 commit 方法提交事务:

DB::commit();
Tip:DB facade 的事务方法同样适用于 查询构造器 和 Eloquent ORM 。