需要在laravel中使用DB :: commit两次以使事务正常工作

时间:2018-08-03 18:33:18

标签: php laravel

我正在尝试使用laravel beginTransaction()/ DB :: commit在数据库中保存一些数据。常用的结构是:

 DB::beginTransaction();
 try {

 // prepare data;
 // $data->save();

 DB::commit();

 } catch (\Exception $e) {
 DB::rollback();
 echo 'erro';
 }

使用上面的代码,我不会收到错误消息,也不会保存数据,但是如果我使用DB:commit两次,如:

DB::beginTransaction();
try {

// prepare data;
// $data->save();

DB::commit();
DB::commit();

} catch (\Exception $e) {
    DB::rollback();
    echo 'erro';
}

一切正常。有人知道为什么会发生这种情况,以及是否可以安全地做我正在做的事情?

已解决

代码被写在一个foreach内,问题是倍数交易的产生,解决了将foreach放入交易内的问题

DB::beginTransaction();
try {
foreach($data as d){
  // prepare data;
  // $data->save();
}
DB::commit();

} catch (\Exception $e) {
DB::rollback();
echo 'erro';
}

0 个答案:

没有答案