yii2:在事务外执行查询?

sg3maiej  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(370)

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

$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;
}

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

hgc7kmma

hgc7kmma1#

您需要使用单独的连接或在事务之后/之前移动此查询。
对于复制db组件,您可以简单地使用 clone -新示例应在第一次查询时打开新连接:

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

它是这样用的 yii\log\DbTarget .
但是您可以考虑为此任务声明单独的db组件( Yii::$app->db2 )-然后您将能够重用此附加连接。

相关问题