Перенос транзакций между action : transaction was inactive[~РЕШЕНО]

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
terrarium volition
Сообщения: 99
Зарегистрирован: 2021.07.15, 21:22

Перенос транзакций между action : transaction was inactive[~РЕШЕНО]

Сообщение terrarium volition »

Всем доброго дня!

Ситуация следующая:
На модальной форме есть GridView и чекбокс, вставленный туда в формате raw, нажатие на него вызывает action с foreach записью в несколько строк AR модели.
Перед записью делаю начало транзакции.
Чтобы коммитить транзакцию надо проверить, была ли нажата кнопка "Принять" на модальной форме - факт нажатия фиксируется в другом action, вызываемом, собственно, по нажатию кнопки.
Чтобы перенести начатую транзакцию, я её сохраняю в сессию и достаю в action нажатия кнопки.
Но коммитить я её не могу, т.к. получаю :

Код: Выделить всё

yii\db\Exception: Failed to commit transaction: transaction was inactive
А если кнопка "Применить" не была нажата, а модальное окно было просто закрыто(юзер передумал) или юзер выставил чекбокс в третье состояние(квадратик), то, значит, надо всё вернуть, как было. Значит, нужно делать роллбэк транзакции, для этого я отлавливаю закрытие модального окна, шлю ajax и на сервере достаю из сессии ту же сохранённую транзакцию. Роллбэк тоже не срабатывает по причине того же устаревания.

Подскажите, пожалуйста, как это всё дело провернуть? :?

Вариант с сохранением значений чекбокса ТОЛЬКО по нажатию кнопки "Применить" прошу не предлагать.
Во- первых, потому что:
На форме нет ActiveForm, по кнопке данные с формы не собираются. Потому что данные на форме вытащены не из модели, а через ArrayDataProvider, там просто массив данных из разных моделей и переделывать что-то там не целесообразно.
Во-вторых, я не умею выбирать значения столбцов GridView на отправку на сервер. :(

Если кто-то знает, как собрать данные с GridView, то прошу подсказать, т.к. это тоже решит проблему!
Спасибо!
Последний раз редактировалось terrarium volition 2023.07.17, 15:24, всего редактировалось 1 раз.
terrarium volition
Сообщения: 99
Зарегистрирован: 2021.07.15, 21:22

Re: Перенос транзакций между action : transaction was inactive

Сообщение terrarium volition »

Ну ок, сделал я модель, со столбцами GridView тоже разобрался.
Но любопытства ради, как, всё-таки, переносить транзакции из action в action?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Перенос транзакций между action : transaction was inactive[~РЕШЕНО]

Сообщение SiZE »

Вы конечно перемудрили) Создавайте записи по кнопке применить, потому что вы сами себе противоречите. Текстовые дискусси вести по этому поводу нет смысла, долго и дорого :D

А по вашему вопросу, есть распределенные транзакции, но вам они не нужны.
terrarium volition
Сообщения: 99
Зарегистрирован: 2021.07.15, 21:22

Re: Перенос транзакций между action : transaction was inactive[~РЕШЕНО]

Сообщение terrarium volition »

SiZE писал(а): 2023.07.17, 20:26 Вы конечно перемудрили) Создавайте записи по кнопке применить, потому что вы сами себе противоречите. Текстовые дискусси вести по этому поводу нет смысла, долго и дорого :D
Перемудрил - это мягко сказано.))
В итоге, создаю записи в ранее не существующей модели по нажатию на чекбокс.
А логику, которую ранее хоте делать на лету(т.к. не было модели и таблицы в БД под неё), делаю по нажатии на кнопку.
распределенные транзакции
Спасибо, хоть знать буду что гуглить.Рано или поздно пригодятся.
Ответить