这是我的代码:
$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
没有,所以它应该回滚。但它没有,为什么?
答案 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);