我需要在已启动的事务之外运行查询:
$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;
}
有没有一种聪明的方法可以做到这一点,或者我是否需要克隆/创建一个新的数据库连接——如果是这样,最好的方法是什么,而无需再次指定数据库参数并只使用相同的配置?
最佳答案
您需要使用单独的连接或在交易之后/之前移动此查询。
要复制数据库组件,您可以简单地使用 clone
- 新实例应该在第一次查询时打开新连接:
$connection = clone Yii::$app->db;
$connection->createCommand("INSERT INTO...")->execute();
在yii\log\DbTarget
中就是这样使用的.
但是您可以考虑为此任务声明单独的数据库组件 (Yii::$app->db2
) - 然后您将能够重用这个额外的连接。
关于php - Yii2:在事务外执行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50330540/