我有一个主函数 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();
}
}
最佳答案
在 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;
}
关于php - 嵌套事务在 Laravel 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56022393/