Yii 的 处理事务

$connection=new CDbConnection($dsn,$username,$password);

$connection=Yii::app()->db;   // 假设你已经建立了一个 "db" 连接

原始方式:

$transaction=$connection->beginTransaction();

try

{

    $connection->createCommand($sql1)->execute();

    $connection->createCommand($sql2)->execute();

    //.... other SQL executions

    $transaction->commit();

}

catch(Exception $e) // 如果有一条查询失败,则会抛出异常

{

    $transaction->rollBack();

}

 

AR中使用方法:

每个 AR 实例都含有一个属性名叫 dbConnection ,是一个 CDbConnection 的实例,这样我们可以在需要时配合 AR 使用由 Yii DAO 提供的 事务 功能:

$model=Post::model();

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

try

{

    // 查找和保存是可能由另一个请求干预的两个步骤

    // 这样我们使用一个事务以确保其一致性和完整性

    $post=$model->findByPk(10);

    $post->title='new post title';

    $post->save();

    $transaction->commit();

}

catch(Exception $e)

{

    $transaction->rollBack();

}

 

注意:上面红色部分其实都是CDbconnection的实例

猜你喜欢

转载自hnlixf.iteye.com/blog/1560116