@AtomU235

Yii 2 — Как организовать на одной форме взаимодействие модели и подчиненной модели?

Приветствую.
Задача. Есть модель-1 (владелец) и связанная модель-2 (подчиненная). Выводится на форму как модель-1 один экземпляр модели, например поле дата и модель-2 в виде набора экземпляров модели в griidView. Если кто знаком с 1С, очень похоже на документ и табличную часть документа.
Вопрос: 1. Как можно сделать добавление/удалении/редактирование строк в подчиненной таблицы еще не имея сохраненную запись в таблице владельце. То есть id Модели-1 еще не известен.
2. Фиксировать в базе данных все манипуляции с модель-2 (добавление/удалении/редактирование строк) только после сохранения модели-1.
UPD : Сейчас делаю так. первым шагом сохраняю запись из модели-1 и только потом даю возможность работать с моделью-2. Каждое изменение в модели-2 сразу сохраняется в базе.
UPD 2: 5b239d191bb67531078097.jpeg
Для наглядности. Желтое - Модель-1, зеленое - модель-2
Иными словами хотелось бы наколачивать модель-2 записями и что бы они сохранились только когда я нажму "Сохранить" В общем самое обычное поведение для десктопных приложений. по неопытности или по косности в веб разработке это ставит меня в тупик. Казалось бы элементарная вещь :)
  • Вопрос задан
  • 230 просмотров
Пригласить эксперта
Ответы на вопрос 2
@masterfreelance
программист со стажем
1.Никак. Да и в подавляющем большинстве случаев это делать ненужно, это нарушает целостность базы. В 1С при сохранении сначала создается запись для документа, а потом к этому документу табличная часть. То, что вы видите поля нового документа и поля табличной части на клиенте, это не значит что все это уже есть в базе. И конечно все это обернуто в транзакцию.
2.Опять же транзакции. Не удалось зафиксировать изменения в модели1 - откатывайтесь до начального состояния.
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Много текста, а по сути я так понял, что проблема только с отсутствием id у новой модели. Решается она или:
- сразу сохраняем пустые или демо данные, потом уже рендерим форму
- отправляем все одновременно, при этом сохранение связанных данных происходит в afterSave родителя, то есть имена полей дочек типа ParentModelName[someChildModelName][AttrinuteName], соответственно данные через load родителя попадают в публичный атрибут родителя и доступен d afterSave через $this->someChildModelName.
Есть метод link, вот: https://www.yiiframework.com/doc/guide/2.0/ru/db-a...
Ответ написан
Ваш ответ на вопрос

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

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