代码之家  ›  专栏  ›  技术社区  ›  TheStoryCoder

Yii2:是否在事务外部执行查询?

  •  1
  • TheStoryCoder  · 技术社区  · 6 年前

    我需要在已启动的事务之外运行查询:

    $transaction = \Yii::$app->db->beginTransaction();
    try {
    
        //... other database queries within the transaction ...
    
        //Query I want to be inserted regardless:
        \Yii::$app->db->createCommand("INSERT INTO...")->execute();
    
        $transaction->commit();
    } catch (\Exception $e) {
        $transaction->rollBack();
        throw $e;
    }
    

    有没有一种聪明的方法可以做到这一点,或者我是否需要克隆/创建一个新的数据库连接?如果有,那么不必再次指定数据库参数,只需使用相同的配置,最好的方法是什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   rob006    6 年前

    您需要在事务之后/之前使用单独的连接或移动此查询。

    对于复制DB组件,您可以简单地使用 clone -新实例应在第一次查询时打开新连接:

    $connection = clone Yii::$app->db;
    $connection->createCommand("INSERT INTO...")->execute();
    

    在中以这种方式使用 yii\log\DbTarget

    但您可以考虑为此任务声明单独的DB组件( Yii::$app->db2 )-然后您将能够重用此附加连接。