Короткая нотация Yii::$app->db->transaction(function($db) { $db->createCommand($sql1)->execute(); $db->createCommand($sql2)->execute(); // ... executing other SQL statements ... }); Длинная нотация $db = Yii::$app->db; $transaction = $db->beginTransaction(); try { $db->createCommand($sql1)->execute(); $db->createCommand($sql2)->execute(); // ... executing other SQL statements ... $transaction->commit(); } catch(\Exception $e) { $transaction->rollBack(); throw $e; } Указание уровня изоляции //yii\db\Transaction::READ_UNCOMMITTED - низший уровень, "Грязное" чтение //yii\db\Transaction::READ_COMMITTED - предотвращает "Грязное" чтение. //yii\db\Transaction::REPEATABLE_READ - предотвращает "Грязное" чтение и не повторяющееся чтение. //yii\db\Transaction::SERIALIZABLE - высший уровень, предотвращает все вышеуказанные проблемы. $isolationLevel = \yii\db\Transaction::REPEATABLE_READ; Yii::$app->db->transaction(function ($db) { ... }, $isolationLevel); Вложенные транзакции Yii::$app->db->transaction(function ($db) { // outer transaction $db->transaction(function ($db) { // inner transaction }); }); В длинной нотации $db = Yii::$app->db; $outerTransaction = $db->beginTransaction(); try { $db->createCommand($sql1)->execute(); $innerTransaction = $db->beginTransaction(); try { $db->createCommand($sql2)->execute(); $innerTransaction->commit(); } catch (\Exception $e) { $innerTransaction->rollBack(); } $outerTransaction->commit(); } catch (\Exception $e) { $outerTransaction->rollBack(); }
Yii Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor