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

Yii как сделать одну форму в Single Table Inheritance?

Всем привет!) Снова с глупыми вопросами)) По примеру https://sohabr.net/habr/post/274925/ сделал свои модели. Остановился в действии actionCreate, где добавляем новые записи в базу, а так же выбираем новые.

В actionCreate мы имеем примерно такой код:
public function actionCreate()
    {
        $model = new Сar();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }


В этом случае, при выборе в форме $type = 'sport', созданная модель не будет поменена на $model = new SportCar().

Как мне менять модель в зависимости от типа в действии создания? Так же хотелось бы навесить на это ajax и подгружать нужные поля формы в зависимости от типа.

Я предполагаю, что логику создания модели надо делать ещё и в контроллере в зависимости от типа. Возможно ошибаюсь. В форме делаем select с типами и вещаем на него ajax на действие actionCreate. После ajax запроса и в зависимости от типа создаем нужную модель и подгружаем нужные поля для заполнения.

Подскажите, правильно ли я думаю?) Возможно вообще не по тому пути пошел. Может быть нужно было сделать не моделями форм... Буду очень благодарен!!!!!!!))))

Моя таблица получилась такая 5b9e3b231824b286824751.png Тип поля в данном случае role
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
public function actionCreate($type)
    {
        switch ($type){
         case SportCar::TYPE: 
           $model = new SportCar();
           break;

          ......
          default:
             $model = new Сar();
         }

что бы не делать это постоянно, можно вынести это в метод приватный в контролере
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы