如何在Laravel中使用DB事务

时间:2015-08-15 18:35:54

标签: php mysql laravel

我正在使用OctoberCMS,我的规则位于模型类上。当发生规则验证错误时,它们会抛出新的ModelException

尝试:

DB::beginTransaction();
try 
{
  $model = new Model;
  $model->name = $name;
  $model->save();

  $another = new Another;
  $another->id = $model->id;
  $another->value = $value;
  $another->save();
  // all right
  DB::commit();
}
catch( ModelException $e ) 
{
  // some rules exception with one of these models
  DB::rollback();
}

上面的代码保存$model,如果保存ModelException时有一个$another,则$model记录会保留在数据库中。

  

mysql:5.6.21

     

表:InnoDB

我的解决方法是:

    $model = new Model;
    $model->name = $name;
    $model->save();
    try 
    {
      $another = new Another;
      $another->id = $model->id;
      $another->value = $value;
      $another->save();
    }
    catch( ModelException $e ) 
    {
      $model->delete();
      $myerrors = $another->errors()->all();
    }

如何使Laravel交易在描述的情况下运作?

1 个答案:

答案 0 :(得分:3)

你可以试试这个:

<?php
// Silence is golden.
  

注意:事务闭包中抛出的任何异常都会导致   要自动回滚的事务。 Laravel Website

你也可以read this,非常好地解释。