Yii 按Cgridview中的查找值进行筛选

Yii 按Cgridview中的查找值进行筛选,yii,Yii,我早期的Yii。我已经搜索过了,但在这篇文章中找不到任何线索。我已经修改了admin.php布局,从几个相关的表中查找值,如下所示 <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'silo-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array(

我早期的Yii。我已经搜索过了,但在这篇文章中找不到任何线索。我已经修改了admin.php布局,从几个相关的表中查找值,如下所示

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'silo-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
            'id',
            array(
                    'name'=>'silo_id',
                    'value'=>'$data->silo->name',
                    'header'=>'Parent',
            ),
            'name',
            array(
                    'name'=>'silo_type',
                    'value'=>'$data->siloType?$data->siloType->type:"no silo type"',
            ),
            array(
                    'class'=>'CButtonColumn',
            ),
    ),
)); ?>

一种快速方法是使用下拉列表而不是文本字段作为筛选字段。您可以按如下方式填充此内容

'name'=>'silo_id',
....
'filter'=>CHtml::listDataEx(Silo::model()->findAll(),'id','name')
一种更长更复杂的方法是修改查询,以包含对外部字段的搜索。您需要存储搜索词。对于一个这样的领域,您需要

  • 在模型中添加公共字段,例如$silo\u name
  • 在模型的
    rules()
    方法中将此字段设置为安全
  • 将所需的列过滤器设置为

    'filter'=>CHtml::activeTextField($model,'silo_name')
    
  • 最后编辑模型的
    search()
    方法以反映上述内容

    $criteria->together=true;//perform a single query
    $criteria->with=array('silo'=>array('id','name'));//specify which relations to add to the query
    $criteria->compare('silo.name',$this->silo_name,true);//$silo_name is a public field