【问题标题】:Transaction doesn't work in Yii事务在 Yii 中不起作用
【发布时间】:2012-12-09 17:46:26
【问题描述】:

这是我的代码:

$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 未保存,因此应回滚。但它没有,为什么?

【问题讨论】:

  • 据我所知,您没有提交您的更改(但我不知道 PHP 或 Yii)

标签: mysql activerecord transactions yii


【解决方案1】:

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

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

//or:

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

【讨论】:

    【解决方案2】:

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

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

    抛出新异常($e);

    【讨论】:

      猜你喜欢
      • 2014-07-06
      • 1970-01-01
      • 2013-09-08
      • 2018-04-14
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多