首先介绍Yii事务的处理方法
$transaction= Yii::app()->db->beginTransaction();//创建事务
$transaction->commit();//提交事务
$transaction->rollback();//回滚事务
其次上代码
class xxxxx extends xxxxx2{
public function aaa(){
// 以下实例将需要事务处理的操作放进try里
$transaction = Yii::app()->db->beginTransaction();
try {
$a = XXX::model()->findByPk(X);
$a->x = 1;
$a->setAttribute('字段名', '值')
//如果仅仅写为:$a->save(); 那么就算保存失败,也不会去执行catch里的内容
if(!$a->save()){
throw new CException('这里保存失败了,通知事务回滚');
}
$b = YYY::model()->findByPk(Y);
$b->y = 2;
$b->setAttribute('字段名', '值')
if(!$b->save()){
throw new CException('这里保存失败了,通知事务回滚');
}
//这里也可以调用其他方法,同样适用于事务,提交之前,对数据库的更改不可见
if(!$this->ccc()){
throw new CException('这里保存失败了,通知事务回滚');
}
$transaction->commit(); //提交事务会真正的执行数据库操作
} catch (Exception $e) {
//如果操作失败, 数据回滚
$transaction->rollback();
}
}
public function ccc(){
$c = ZZZ::model()->findByPk(Y);
$c->y = 3;
$c->setAttribute('字段名', '值')
return $c->save();
}
}