Yii2:在事务外执行查询?

时间:2018-05-14 12:37:33

标签: php mysql transactions yii2

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

$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 个答案:

答案 0 :(得分:2)

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

要复制数据库组件,您只需使用clone - 新实例应在第一次查询时打开新连接:

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

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

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