Страница 1 из 1

Подстановка из связанной таблицы в Active Form

Добавлено: 2018.08.11, 11:58
svil
Есть 2 таблицы статьи - blog(id,name, text) и комментарии к ним - comment(id, blog_id, name, text). Comment ссылается на blog по внешнему ключу blog_id. При обновлении в админке комментария как сделать подстановку вместо blog_id(comment) отображение name(blog по id)?
Форма генерируется как:

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

 <?= $form->field($model, 'blog_id'->'')->textInput() ?>
Как дописать, чтобы сразу подставлялось name(blog) по blog_id(comment)=id(blog). Связи hasOne и hasMany сгенерированы gii в моделях Blog и Comment. Не нашла, как вывести подстановку.

Re: Подстановка из связанной таблицы в Active Form

Добавлено: 2018.08.11, 15:20
svil
Нашла подробное описание, как сделать: https://sllite.ru/2014/10/yii2-%d1%81%d ... %b8%d1%80/
Итак в _form

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

 <?= $form->field($model, 'blog_id')->dropDownList(
        ArrayHelper::map($blog, 'id', 'name')
    ) ?>
create, update :

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

 <?= $this->render('_form', [
        'model' => $model, 'blog'=>$blog,
    ]) ?>
Контроллер CommentController:

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

 
    public function actionView($id)
    {
        $blog= Blog::find()->all();
        return $this->render('view', [
            'model' => $this->findModel($id),
            'blog' => $blog,
        ]);
    }

    
    public function actionCreate()
    {
        $model = new Comment();
        $blog= Blog::find()->all();
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }else {
            return $this->render('create', [
                'model' => $model,
                'blog' => $blog,
            ]);

        }

    }

    
    public function actionUpdate($id)
    {
        $model = $this->findModel($id);
        $blog= Blog::find()->all();
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

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

 
Если 'blog' =>$blog не добавить везде, где можно, выскакивает ошибка, что $blog не определен.