Несколько связанных моделей один контроллер
Проблема, с которой я столкнулся, связана с несколькими моделями в одном контроллере/представлении в 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,
));
}
Я знаю, что это должно быть легко, но я не могу понять, как обернуть мою голову вокруг этого, у меня есть прочитал все документы, которые смог найти.