Получаются вложенные транзакции в коде.
Вопрос 1: это одна и та же транзакция или это две разные транзакции? Будет ли доступна переменная $a, если внешняя транзакция, в которой она была сохранена не коммитилась, но уже закоммитилась внутренняя?
При чем тут транзакции, и yii? Вопрос в плоскости области видимости переменных в php, переменная не будет видна за пределами функции и не сохраняется для следующего вызова функции.
McMike, Думаю будет ошибка, Вы обращаетесь к пустоте и ищите в ней метод getSavedData()
Вот это тоже странно $saveData();
Это не переменная, не функция, что это вообще?
Есть подозрение, что это должно было выглядеть так $this->saveData(); и $a = $this->getSavedData(); но что внутри этих методов Вы тоже не описали.
$transaction2->commit(); сработает для $transaction1 = Yii::$app->db->beginTransaction(); или после него будут сохранено только то, что было после $transaction2 = Yii::$app->db->beginTransaction(); ?
В постгресе нет вложенных транзакций. По поводу кода - не знаю, у нет ни PHP, ни Yii. Думаю, вам самому будет проще открыть исходники и посмотреть, что там. Ну или пройти этот участок кода отладчиком.
в какой последовательности запускали транзакции в такой-же последовательности нужно их закрыть, это требования драйвера PDO к БД ( AR работает через PDO, есть вложенные транзакции или нет - это смотреть мануал по СУБД)
Работать сними нужно вот так:
транзакция begin 1
- транзакция begin 2
- транзакция begin 3
- транзакция commit/rollback 3
- транзакция commit/rollback 2
транзакция commit/rollback 1