2011-01-31 65 views
4

我有一个CGridView部件的课程模式搜索与CGridView belongs_to的模型柱,Yii的

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'lesson-grid', 
    'dataProvider'=>$model->search(), 
    'filter'=>$model, 

...和教训关系到用户模式:

'user' => array(self::BELONGS_TO, 'User', 'user_id'), 

...和该CGridView有从上面

'columns'=>array(
     ... 
     array(
      'name' => 'user', 
      'header'=>'Teacher', 
      'value' => '$data->user->lastname', 
     ), 

这样描述的belongs_to的模型用户的姓氏列,我不能symply与CG搜索ridView在这个列中,但我需要它。

如何使用CGridView搜索'$ data-> user-> secondname'?

我认为我应该在课程模型中扩展搜索方法,但是怎么做?

现在看起来是这样的:

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

    $criteria=new CDbCriteria; 

    $criteria->compare('id',$this->id); 
    $criteria->compare('student',$this->student,true); 
    $criteria->compare('comment',$this->comment,true); 

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

回答

8

这应该工作,它在搜索()方法添加到您的搜索条件:

$criteria->with[]='user'; 
$criteria->addSearchCondition("user.secondname",$this->user_id); 

这是我做的,但:

if(!intval($this->user_id) && is_string($this->user_id) && strlen($this->user_id) > 0) { 
    $criteria->with[]='user'; 
    $criteria->addSearchCondition("user.secondname",$this->user_id); 
} else 
    $criteria->compare('t.user_id',$this->user_id); 

这里是CGridView的定义:

'columns'=>array(
    ... 
    array(
    'name' => 'user_id', 
    'header'=>'User', 
    'sortable'=>false, // since it would still be sorting based on ID 
    // 'value' => '$data->user->lastname', // basic version 
    'value'=>'CHtml::link((isset($data->user))?$data->user->username:$data->user_id,array("user/view","id"=>$data->user_id))', // link version 
    ), 

这是一个有趣的小窍门:如果搜索项是一个字符串,而不是一个intval(),它会通过“user”关系搜索用户的第二个名字。但是如果你输入一个user_id,它会通过他们的user_id找到用户 - 默认的搜索()功能。

注意:这将启用筛选,但它仍将基于ID进行排序。您需要额外实施一些功能才能使分类生效。

确实有其他方法可以做到这一点,但这是我如何做到这一点。我怀疑有这样一种“正确”的方式来使用这种关系,但我的技巧很有效。

+0

非常感谢!除了你没有人没有给出答案.... – Kir 2011-02-02 04:32:13