2018-11-06 11:35:19 546次浏览 3条回答 0 悬赏 100 金钱

我现在是这样的,项目有很多的数据库,都是在同一个mysql服务器下的,在main.php里面有db,db2,db3 现在是这样的有个入库操作,A表来自于db2,B表来自于db3,在使用事务的时候是这句: $transaction = \Yii::$app->get('db2')->beginTransaction(); 我不清楚到底写get('db2')还是get('db3')还是随便都可以??

亿速云
  • 回答于 2018-11-06 11:41 举报

    $transaction = Yii::$app->db->beginTransaction(); db可以换成你的配置

    3 条回复
    回复于 2018-11-06 11:48 回复

    我知道啊 Yii::$app->db2 还是 Yii::$app->db3

    回复于 2018-11-06 14:18 回复

    Mysql 需要支持XA 然后写两个事务

    回复于 2018-11-06 14:20 回复

    分布式事务 这里没有必要吧 又不是不同的MySQL服务器

  • 回答于 2018-11-06 12:48 举报

    事务支持嵌套: https://www.yiiframework.com/doc/guide/2.0/en/db-dao#nesting-transactions

    如果先写入 A 表,就把 B 表的写入操作事务代码嵌套在 A 表的事务内。我还没遇到过你说的类似场景,你可以试一下。

  • 回答于 2018-11-06 14:15 举报
    $t1 = Yii::$app->db1->beginTransaction(); 
    $t2 = Yii::$app->db2->beginTransaction(); 
    try {
        if(update a failed) {
            throw new Exception('update a failed');
        }
        if(update b failed) {
            throw new Exception('update b failed');
        }
        $t1.commit();
        $t2.commit();
    } cacth(Exception $e) {
        $t1.rollback();
        $t2.rollback();
    }
    
您需要登录后才可以回答。登录 | 立即注册
xyf90314
副总裁

xyf90314

注册时间:2015-03-04
最后登录:1小时前
在线时长:92小时43分
  • 粉丝21
  • 金钱4897
  • 威望40
  • 积分6217

热门问题