myks92
@myks92
Нашёл решение — пометь вопрос ответом!

Как правильно сохранять табличный ввод?

Поскажите, пожалуйста как сохранить такой запрос используя табличный ввод. Интересует действие в контроллере в actionCreate 5a27b27f945cc716143675.png5a27b2aa16343001065922.png
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Доброе утро, Максим.
Да как же так, ну что же такое? В документации всё же расписано)))
Пусть будет какая-то модель, например Users. Нужно в форме создать нескольких пользователей и записать в базу.
Контролер:
public function actionCreate()
{
     $count = count(Yii::$app->request->post('Users', [])); // получаем количество переданных данных.
     $users = [new Users()]; // создаём один экземпляр модели, по умолчанию в представлении будет создаваться всегда одно поле.
    for(i = 1; $i < $count; $i++){
        $users[] = new Users(); 
    }
    if(Model::loadMultiple($users, Yii::$app->request->post('Users')) && Model::validateMultiple($users)){
          foreach($users as $user){
             $user->save(false); // валидировать уже не надо, так как данные проверены Model::validateMultiple()
         }
          return $this->redirect('куда_надо_сделать_redirect');
    }

    retun $this->render('create', ['users' => $users]); // передаём в представление массив моделей Users, гарантированно выводится одна модель.
     
}

В представлении формы:
foreach($users as $key => $user)
  {
        echo $form->field($user, "[$key]name")->textInput();
   }

Всё!!! Больше ничего не надо! Ну сколько же раз уже надо это Вам объяснять?)))))
И в документации это всё расписано. Сохранение/обновление моделей ничем не отличаются для create/update.
Единственное отличие в том, как Вы получаете массив моделей.

P.S.
Если надо сохранить две разные модели, одна из которых будет табличным вводом, то код и в create и в update чуть изменится.
$model = new Model();
    // ******************
    if($model->load(Yii::$app->request->post()) && Model::loadMultiple($users, Yii::$app->request->post('Users')) && Model::validateMultiple($users)){
          $model->save();
          foreach($users as $user){
             $user->save(false); // валидировать уже не надо, так как данные проверены Model::validateMultiple()
         }
          return $this->redirect('куда_надо_сделать_redirect');
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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