Итак, у нас есть мануал по работе с табличным вводом данных: https://www.yiiframework.com/doc/guide/ ... ular-input
Общий алгоритм работы с такими данными:
1. Есть какая главная модель, Model ($model) таблица model
2. Есть зависимая модель ModelEntry ($model_entry) таблица model_entry
3. К одной записи в model относятся много записей в model_entry (т.н. табличная часть)
Для массовой загрузки моделей ModelEntry в мануале рекомендуется использовать ModelEntry::loadMultiple(...)
На практике, когда мы генерируем табличную часть на лету, с ключами для массива моделей ModelEntry получается полная фигня. Как их генерировать, как принять - фиг знает.
Описывать долго - рабочий учебный пример решения проблемы с ключами для ModelEntry::loadMultiple(...) здесь: https://github.com/ale10257/learning_task
Вкратце: ключи генерируем каждый раз уникальные (uniqid()), перед сохранением в БД, если это операция update - грохаем все табличные записи, обязательно используем транзакции
Что-то типа:
Код: Выделить всё
/**
* @param array $post $_POST
* @param ActiveRecord $model
* @return array
* @throws \yii\base\InvalidConfigException
*/
private function getEntryArr($post, $model)
{
$entry_form_name = (new ModelEntry())->formName();
$entry_arr = [];
$keys = array_keys($post[$entry_form_name]);
foreach ($keys as $key) {
$entry = new ModelEntry();
$entry->model_id = $model->id;
$entry_arr[$key] = $entry;
}
MailingListEntry::loadMultiple($entry_arr, $post);
return $entry_arr;
}