php - 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;
}
有没有一种聪明的方法可以做到这一点,或者我需要克隆/创建一个新的数据库连接 - 如果是这样,那么最好的方法是什么,而不必再次指定数据库参数并且只使用相同的配置?
解决方案
您需要使用单独的连接或在事务之后/之前移动此查询。
对于复制数据库组件,您可以简单地使用clone
- 新实例应在第一次查询时打开新连接:
$connection = clone Yii::$app->db;
$connection->createCommand("INSERT INTO...")->execute();
中以这种方式使用yii\log\DbTarget
。
但是您可以考虑为此任务声明单独的 DB 组件 ( Yii::$app->db2
) - 然后您将能够重用这个额外的连接。
推荐阅读
- sql - 与 Oracle SQL 中的 ALL 等 Compoperator 的 NULL 行为
- mysql - 如何显示某个工人MYSQL的主管姓名
- sql - 优化查询大型数据集的查询
- mysql - mysql 按期间并排比较列聚合
- html - 如何使 HTML 中的输入元素的文本溢出可见?
- python - 在 Python 中根据 Google 电子表格中的列创建目录和子文件夹
- node.js - 如何阻止第二个(或以后的)HTTP 请求,直到第一个请求过程完成。【Node.JS / Firebase 云功能】
- python - Python + Win32:将标题从一个 Excel 工作簿粘贴到另一个 Excel 工作簿的顶部
- python - 尝试在谷歌电子表格中多次创建列的问题
- jenkins - 我如何告诉 Jenkins 我希望最后 n 行日志出现在标准错误中