Yii2: выполнить запрос вне транзакции? - PullRequest
0 голосов
/ 14 мая 2018

Мне нужно выполнить запрос вне транзакции, которую я начал:

$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 голосов
/ 14 мая 2018

Вам необходимо использовать отдельное соединение или переместить этот запрос после / до транзакции.

Для копирования компонента БД вы можете просто использовать clone - новый экземпляр должен открывать новое соединение при первом запросе:

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

Используется таким образом в yii\log\DbTarget.

Но вы можете рассмотреть возможность объявления отдельного компонента БД для этой задачи (Yii::$app->db2) - тогда вы сможете повторно использовать это дополнительное соединение.

...