php - Yii2:在事务外执行查询?

标签 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;
}

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

最佳答案

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

要复制数据库组件,您可以简单地使用 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/

相关文章:

php - 如何使用 php 以正确的编码重写此 xml 文件?

java - 谷歌应用引擎 : understanding datastore transactions

mysql - 是否可以不用程序进行mysql事务?

ruby-on-rails - 如何锁定一组对象以进行操作?

php - 从 mysql 表中选择 3 行,然后获取每一行的特定列

php - 连接到目标机器上的 mySql 数据库的问题

php - 提交PHP mysql后如何编辑数据库信息并保留表单中的值

php - 在逗号分隔值字段 Laravel 5.1 中查找

mysql - 同一个表内的Left Join SQL

Javascript : execute a script after location. href