Как сделать вложенные транзакции в Yii2?

Задам несколько вопросов на примере ненастоящего кода.
Есть такой код:

$transaction = Yii::$app->db->beginTransaction();
$saveData1();
somefunction();
$transaction->commit();

Внутри somefunction() так же вызываеться транзакция:

$transaction = Yii::$app->db->beginTransaction();
$transaction->commit();
$a = getSavedData1();

Получаются вложенные транзакции в коде.
Вопрос 1: это одна и та же транзакция или это две разные транзакции? Будет ли доступна переменная $a, если внешняя транзакция, в которой она была сохранена не коммитилась, но уже закоммитилась внутренняя?
  • Вопрос задан
  • 767 просмотров
Пригласить эксперта
Ответы на вопрос 3
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
При чем тут транзакции, и yii? Вопрос в плоскости области видимости переменных в php, переменная не будет видна за пределами функции и не сохраняется для следующего вызова функции.
Ответ написан
@PapaStifflera
Родился, вырос...
В Yii нет транзакций. Вообще нет. Они есть в БД. Не все СУБД поддерживают вложенные транзакции. Смотрите доку по той, которую используете.
Ответ написан
sanchezzzhak
@sanchezzzhak
Ля ля ля...
в какой последовательности запускали транзакции в такой-же последовательности нужно их закрыть, это требования драйвера PDO к БД ( AR работает через PDO, есть вложенные транзакции или нет - это смотреть мануал по СУБД)
Работать сними нужно вот так:

транзакция begin 1
- транзакция begin 2
- транзакция begin 3
- транзакция commit/rollback 3
- транзакция commit/rollback 2
транзакция commit/rollback 1

лесенкой, по другому они не работают
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы