mysql - 交易在 Yii 中不起作用

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

最佳答案

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

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

//or:

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

关于mysql - 交易在 Yii 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13789965/

相关文章:

MySQL 无法加载 adter 远程连接配置

ruby-on-rails - 未知属性 : user_id

entity-framework - EF Code First DBContext 和事务

c# - 交易范围超时 10 分钟

sql-server - 在负载下刷新汇总表的最佳方法是什么?

php 到 MySQL 不工作,不知道为什么

MySQL Workbench 不会连接到 AWS RDS 数据库。错误 - "Unable to connect to localhost"

c# - 显示表动态

ruby-on-rails - 如何使用新方法扩展 ActiveRecord 关系?

mysql - 如何在 rails 中通过查询在组中添加限制?