2013-07-19 69 views
0

Yii的早期日子。已搜索,無法找到任何線索,因此後。我已經修改了admin.php的佈局,從幾個相關表的查找值如下按照查找高亮由Cgridview查看

<?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)。

我該如何改變這種情況? 謝謝

回答

0

一個快速方法是使用下拉列表,而不是文本字段的過濾字段。你可以填寫如下:

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

更棘手的方法是改變你的查詢,包括搜索外國領域。您需要存儲搜索詞。對於一個這樣的領域,你需要

  1. 公共字段添加到您的模型說$ silo_name
  2. 將這個域安全模型中的rules()方法
  3. 設置所需的列篩選到

    'filter'=>CHtml::activeTextField($model,'silo_name') 
    
  4. 最後編輯模型的方法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