通过在Cgridview中查找值来过滤

时间:2013-07-19 07:22:32

标签: yii

我早年的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',
            ),
    ),
)); ?>

这很棒且一切正常......除了过滤字段仍在查找数值而不是文本值这一事实(例如我想过滤文本'描述'而不是代表的UID那个描述)。

我该如何改变这个? 谢谢

1 个答案:

答案 0 :(得分:0)

快速方法是使用下拉列表而不是过滤字段的文本字段。您可以按如下方式填充此内容

'name'=>'silo_id',
....
'filter'=>CHtml::listDataEx(Silo::model()->findAll(),'id','name')

更棘手的方法是更改​​查询以包括搜索外部字段。您需要存储搜索词。对于单个此类字段,您需要

  1. 向您的模型添加公共字段,例如$ silo_name
  2. 在模型的rules()方法
  3. 中将此字段设置为安全
  4. 将所需的列过滤器设置为

    'filter'=>CHtml::activeTextField($model,'silo_name')
    
  5. 最后编辑模型的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