Php 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 {

我有一系列模型要在第一个模型成功的基础上保存,并开始考虑以下许多IF条件:

版本:Yii 1 使用NestedPDO

他们用Yii进行交易的更好方式是什么

$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事务注释)?