2018-11-06 11:35:19 145次浏览 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
最后登录:14小时前
在线时长:81小时26分
粉丝18
金钱3482
威望30
积分4592

热门问题