Php yii中的嵌套事务处理
我有一系列模型要在第一个模型成功的基础上保存,并开始考虑以下许多IF条件: 版本:Yii 1 使用NestedPDO 他们用Yii进行交易的更好方式是什么Php yii中的嵌套事务处理,php,mysql,yii,yii2,Php,Mysql,Yii,Yii2,我有一系列模型要在第一个模型成功的基础上保存,并开始考虑以下许多IF条件: 版本:Yii 1 使用NestedPDO 他们用Yii进行交易的更好方式是什么 $transaction = Yii::app()->db->beginTransaction(); try { if (!$firstmodel->save()) { throw new Exception('FirstModel cannot be saved.'); } else {
$transaction = Yii::app()->db->beginTransaction();
try {
if (!$firstmodel->save()) {
throw new Exception('FirstModel cannot be saved.');
} else {
if (!$secondmodel->save()) {
throw new Exception('SecondModel cannot be saved.');
} else {
if (!$thirdModel->save()) {
throw new Exception('ThirdModel cannot be saved.');
}
}
}
$transaction->commit();
} catch (Exception $e) {
$transaction->rollback();
}
在手动抛出异常之前添加一个回滚。@crafter,catch异常中的回滚不是这样处理的吗?您是对的,它会。try中的回滚是不必要的。我将删除我的评论。如果你担心嵌套,你可以留下“else”语句。只有在未捕获save中的错误或未发生意外错误时,才会到达下一个save()。@crafter,是否可以扩展ActiveRecord save(),使其集中执行此操作,并且我不必在每个方法中编写where throw语句,同时还减少了事务样板(如java/spring事务注释)?