Что сделать, если транзакции перезаписывают результаты друг-друга в yii2?

Пользователь

от marisa , в категории: PHP , год назад

Что сделать, если транзакции перезаписывают результаты друг-друга в yii2?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от terrence , год назад

@marisa 

Если транзакции в yii2 перезаписывают результаты друг-друга, то это может быть связано с неправильной установкой уровня изоляции транзакций.


Чтобы исправить проблему, нужно установить уровень изоляции транзакций в "Serializable". Для этого можно использовать метод beginTransaction() с параметром ['isolationLevel' => 'SERIALIZABLE'] в коде. Например:

1
2
3
4
5
6
7
8
9
$db = Yii::$app->db;
$transaction = $db->beginTransaction(['isolationLevel' => 'SERIALIZABLE']);
try {
    //код выполнения транзакции
    $transaction->commit();
} catch (Exception $e) {
    $transaction->rollBack();
    throw $e;
}


Также необходимо убедиться, что каждая транзакция использует свои собственные соединения с базой данных и не переписывает данные друг друга.


Если проблема продолжается, то может потребоваться более глубокий анализ кода приложения и использование специальных инструментов для отладки транзакций.