Несколько связанных моделей один контроллер


Проблема, с которой я столкнулся, связана с несколькими моделями в одном контроллере/представлении в Yii. В частности, я не могу понять, как создать строку поиска для моей связанной модели в представлениях администратора и поиска с помощью GII-генерируемого CRUD.

У меня есть две модели "рецепты " и"RecipeSteps"

Это мои рецепты отношений

public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
        'recipeSteps' => array(self::HAS_ONE, 'RecipeSteps', 'recipe_id'),
        );
    }

Я уже могу создавать и обновлять с помощью связанных моделей проблема появляется в поиске я могу видеть связанную модель "RecipeSteps" в результаты, потому что я добавил его в свой Gridview следующим образом:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'recipes-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        //'recipe_id',
        'recipe_name',
        'recipe_description',
        'recipeSteps.instructions',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

Однако мне нужно выяснить, как добавить в строку поиска над полем" инструкции", чтобы файл также можно было искать.

Мне нужно выяснить, как добавить "инструкции" в мою форму.
  <div class="wide form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'action'=>Yii::app()->createUrl($this->route),
    'method'=>'get',
)); ?>

    <div class="row">
        <?php echo $form->label($model,'recipe_name'); ?>
        <?php echo $form->textField($model,'recipe_name',array('size'=>11,'maxlength'=>11)); ?>
    </div>

    <div class="row">
        <?php echo $form->label($model,'recipe_description'); ?>
        <?php echo $form->textArea($model,'recipe_description',array('rows'=>6, 'cols'=>50)); ?>
    </div>

    <div class="row buttons">
        <?php echo CHtml::submitButton('Search'); ?>
    </div>

<?php $this->endWidget(); ?>

</div><!-- search-form -->

Функция поиска рецептов в рецептах

public function search()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria=new CDbCriteria;

        //$criteria->compare('recipe_id',$this->recipe_id,true);
        $criteria->compare('recipe_name',$this->recipe_name,true);
        $criteria->compare('recipe_description',$this->recipe_description,true);

        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));

И в Index и Admin В RecipesController

/**
 * Lists all models.
 */
public function actionIndex()
{
    $dataProvider=new CActiveDataProvider('Recipes');
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
}

/**
 * Manages all models.
 */
public function actionAdmin()
{
    $model=new Recipes('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['Recipes']))
        $model->attributes=$_GET['Recipes'];

    $this->render('admin',array(
        'model'=>$model,
    ));
}

Я знаю, что это должно быть легко, но я не могу понять, как обернуть мою голову вокруг этого, у меня есть прочитал все документы, которые смог найти.

1 4

1 ответ:

Для работы с отношением необходимо изменить поиск и определение столбца. Вам нужно использовать функцию with (), columns filter ().

Прочитайте эту тему:

Yii - фильтр поиска поля отношений через cgridview