Laravel 多次调用 DB::beginTransaction() 会不会触发事务嵌套或者事务提交?
答案是不会。
不管你用多少次 DB::beginTransaction()
或者多少次 DB::transaction()
,Laravel 一次只会存在一个事务。
Laravel 拦截多次事务的代码如下
public function beginTransaction() { $this->createTransaction(); $this->transactions++; $this->fireConnectionEvent('beganTransaction'); } /** * Create a transaction within the database. * * @return void */ protected function createTransaction() { if ($this->transactions == 0) { try { $this->getPdo()->beginTransaction(); } catch (Exception $e) { $this->handleBeginTransactionException($e); } } elseif ($this->transactions >= 1 && $this->queryGrammar->supportsSavepoints()) { $this->createSavepoint(); } }
也就是说只有第一次调用 beginTransaction()
方法才会开启事务。
目前尚无回复