leonyl

leonyl

这家伙有点懒,还没写个性签名!

  • 财富值70
  • 威望值0
  • 总积分80

个人信息

  • 回复了 的回答

    楼主,解决了吗?我遇到同样的问题了,用嵌套事务也是有问题

    额 ,事务里面建表,我没碰到过这种情况。。。
    多试试吧

  • 回复了 的回答

    楼主,解决了吗?我遇到同样的问题了,用嵌套事务也是有问题

    http://www.cnblogs.com/xweiwei/archive/2012/11/21/2780497.html
    4.使用事务 用这个方法正常,数据库可以回滚。

  • 回复了 的回答

    我在try中写 if (!$model->save()) { return null;}, 你用trow能断掉后面的吗

    抛出异常后面的不执行

  • 回复了 的回答

    正常来说,按照规范,应该不会出现这个情况。这个事务我也有用,完全没有问题

    不追框架是不知道为啥了,用yii时间不长,问题就是这样如果是事务中用model::xxx方法操作的 都不会回滚
    可能是多库的原因?

  • ========================================================
    第三次更新
    8.png
    如图
    还用原来的代码 我第三步手动抛出异常,不回滚的情况下按理说第一二步都会提交执行sql,但出现的问题是 只第一步update sql提交执行了 第二步的批量插入没有执行,说明第二步的回滚了吧

  • 回复了 的回答

    表类型支不支付事务啊,如果是mysql,把表引擎设置为InnoDB试下

    更新了最新进展,大神有空可以看看

  • 回复了 的回答

    不是太确信,可以尝试下面的思路试试:

    • throw 时使用 yii\db\Exception 而不是 \Exception;
    • 写一个测试 action, 把代码中其它无关内容移除,用两个简单的表,加上最简单的代码,模拟运行一下,看能否重现问题;

    早上得空用tp框架试了试,符合预期,完全没问题
    修改Yii代码,执行原生sql的方式也符合预期了,是不是跟yii的两种模型啥的有关系呢?

  • 7.png

    用这种执行sql方式,手动抛出异常事务是可以回滚的。

  • 回复了 的回答
    $transaction = Yii::$app->db->beginTransaction();
            try{
                xxxx
            }catch (Exception $e) {
                $transaction->rollBack();
                throw $e;
            }
            $transaction->commit();
            return true;
    

    没有 没有,只有一个事务。。。
    现在发现的问题是,如果在操作第二张表的时候,插入的某字段数据库没有的话,这时候sql是没提交执行的,也就是说这样是预期的那样。如果是手动抛出的异常,代码可以走到catch里面,但是第一步操作的表里的数据变了。

  • 回复了 的回答
    $transaction = Yii::$app->db->beginTransaction();
            try{
                xxxx
            }catch (Exception $e) {
                $transaction->rollBack();
                throw $e;
            }
            $transaction->commit();
            return true;
    

    恩恩 我在回滚那的errorData()封装的有exit();

职场新人 等级规则
80/100
资料完整度
10/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

1

Ta的访客

4