Php Yii添加事务回滚操作

Php Yii添加事务回滚操作,php,yii,rollback,Php,Yii,Rollback,调用rollback操作时,是否有方法将操作添加到CDbConnection 我有这个代码,它可以工作: $transaction = $model->dbConnection->beginTransaction(); try { //... //doing some manipulations //... if($model->save()) { $transaction->commit(); $thi

调用
rollback
操作时,是否有方法将操作添加到
CDbConnection

我有这个代码,它可以工作:

$transaction = $model->dbConnection->beginTransaction();

try {
    //...
    //doing some manipulations
    //...

    if($model->save()) {
        $transaction->commit();
        $this->redirect(array('view','id'=>$model->id));
    }

} catch(Exception $e) {
    $transaction->rollback();
    throw $e;
}
$transaction->rollback()时,是否有方法恢复所做的操作时,不会将此代码放入
catch
语句中,就像在事务回滚函数中添加事件一样

也许有一个解决办法,但我不确定它是如何工作的

谢谢

编辑-我想做的是:


当模型保存失败时,数据库将回滚,但我也在对文件进行一些操作(在验证和保存模型之前,我需要这样做),因此如果模型由于验证而无法保存,我需要将这些更改还原到文件。

当前CDbTransaction未定义任何事件

我要做的是创建一个类,该类将以您可以重用的方式处理此逻辑:

//protected/components/AtomicTransformation.php
<?php
class AtomicTransformation {
  private $_model;
  private $_transaction;
  public function __contruct(CModel $model)
  {
    $this->_model = $model;
    $this->_transaction = $model->dbConnection->beginTransaction();
  }
  public function commit()
  {
    $this->_transaction->commit();
  }
  public function rollback( /* pass any params you need for your revert logic */)
  {
    // Do your revert logic here
    $this->_transaction->rollback();
  }
}

$transformation = new AtomicTransformation($model);

try {
    //...
    //doing some manipulations
    //...

    if($model->save()) {
        $transformation->commit();
        $this->redirect(array('view','id'=>$model->id));
    }

} catch(Exception $e) {
    $transformation->rollback( /*your params */ );
    throw $e;
}
//protected/components/AtomicTransformation.php

你到底想做什么?我已经编辑了我的问题。很好,我还没想到呢!