交易在Yii中不起作用

时间:2012-12-09 17:46:26

标签: mysql activerecord transactions yii

这是我的代码:

$transaction = Yii::app()->db->beginTransaction();
            try {
                $tModel->save();
                $activationLink = new ActivationLink;
                $activationLink->User_id = $tModel->id;
                $activationLink->hash1   = User::generateHashCode(100);
                $activationLink->hash2   = User::generateHashCode();
                $activationLink->hash3   = User::generateHashCode();
                $activationLink->time    = time();
                $activationLink->save();                    
                User::sendActivatonLink($tModel->mail,$activationLink->id, $activationLink->hash1, $activationLink->hash2, $activationLink->hash3);
                $transaction->commit();
                $this->redirect(array('view', 'id' => $tModel->id));
            } catch (Exception $e) {
                $transaction->rollback();
                Yii::app()->user->setFlash('error', "{$e->getMessage()}");
                $this->refresh();
            }

$tModel已保存,但$activationLink没有,所以它应该回滚。但它没有,为什么?

2 个答案:

答案 0 :(得分:8)

当验证失败时,Yii save()不会抛出异常。因此,您必须自己检查save()的结果:

if (!$model->save())
   $transaction->rollback();

//or:

if (!$model->save())
   throw new Exception("This will trigger my catch statement block");

答案 1 :(得分:1)

请检查你的mysql引擎我认为你没有使用innodb。要执行事务,我们必须使用innodb。让我知道你的桌子类型/引擎。

OR 您还需要添加代码以了解日志中的错误。

抛出新的异常($ e);