【注意】最后更新于 December 6, 2019,文中内容可能已过时,请谨慎使用。
laravel 事务的使用会忽略的地方
laravel开启事物有两种方法:
1
2
3
4
5
|
DB::transaction(function()
{
DB::table('user')->insert(['username'=>'xxx']);
DB::table('comment')->insert(['content'=>'zzz']);
});
|
当闭包内发生错误就会自动回滚
1
2
3
4
5
6
7
|
DB::beginTransaction();
//这里执行一些数据库操作,包括 eloquent 的
if(condition){
DB::commit();
}else{
DB::rollback();
}
|
但是我有一次发现两种方法的事物都不起作用,在想掉几根头发之后想到了可能是不同数据库的原因!
如果你采用的是分库存储不同逻辑的方式,执行事物的时候一定要加上连接信息 上面的就要这样写了:
1
2
3
4
5
6
7
|
DB::connection('admin_database')->beginTransaction();
//这里执行一些数据库操作,包括 eloquent 的
if(condition){
DB::connection('admin_database')->commit();
}else{
DB::connection('admin_database')->rollback();
}
|
如果逻辑中的 eloquent 连接的数据库和开启事物的数据库不是一个库一样是不起作用的
文章作者
GPF
上次更新
2019-12-06
(7ba517e)