事务在 Yii 中不起作用 [英] Transaction doesn't work in Yii

查看:31
本文介绍了事务在 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 未保存,因此应回滚.但它没有,为什么?

$tModel saved but $activationLink doesn't so it should rolled back. but it didn't ,why?

推荐答案

Yii save() 在验证失败时不会抛出异常.因此你必须自己检查 save() 的结果:

Yii save() does not throw an exception, when just the validation fails. Thus you have to check the result of save() yourself:

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

//or:

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

这篇关于事务在 Yii 中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆