我正在使用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交易在描述的情况下运作?
答案 0 :(得分:3)
你可以试试这个:
<?php
// Silence is golden.
注意:事务闭包中抛出的任何异常都会导致 要自动回滚的事务。 Laravel Website
你也可以read this,非常好地解释。