我有一个在函数B之前和在函数C之后调用的主函数A。两者都保存一个模型,并且在函数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();
}
}
答案 0 :(得分:1)
在Laravel 6中,您可以使用:
DB::connection(DB::getDefaultConnection())->transactionLevel()
获取当前活动交易号。我个人更喜欢使用单笔交易,例如:
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;
}