Lui*_*sci 6 php mysql transactions laravel
我有一个主函数A,在函数B之前和函数C之后调用。两者都保存一个模型,并且在函数A中都有自己的开始事务和主事务,数据如何存储?
我试图在函数 C 上抛出异常,但函数 B 在任何地方存储变量 $modelB
public function B(){
DB::beginTransaction();
try{
$modelB->save();
DB::commit();
}catch(\Exception $e){
DB::rollback();
}
}
public function C(){
DB::beginTransaction();
try{
$modelC->save();
DB::commit();
}catch(\Exception $e){
DB::rollback();
}
}
public function A(){
DB::beginTransaction();
try{
$this->B();
$this->C();
DB::commit();
} catch(\Exception $e){
DB::rollback();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
在 Laravel 6 中你可以使用:
DB::connection(DB::getDefaultConnection())->transactionLevel()
Run Code Online (Sandbox Code Playgroud)
获取当前活跃交易数量。就我个人而言,我更喜欢使用单一事务,例如:
if(DB::connection(DB::getDefaultConnection())->transactionLevel()==0){
DB::beginTransaction();
}
try{
//DO SOME STUFF
if(DB::connection(DB::getDefaultConnection())->transactionLevel()==0)
{
DB::commit();
} // else, leave commit to parent transaction
}catch(\Throwable $e)
{
DB::rollback();
throw $e;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6554 次 |
| 最近记录: |