如何从CGridView中的不同表中获取数据?

时间:2014-07-30 11:49:49

标签: php yii cgridview

我有3张桌子。 car_types:

id | main_image | title

car_type_classifiers:

id | car_type_id | classifier_id

分类器:

id | class

我想显示一个CGridView,所以有列:Title |类。但是对于一个car_type,类可以很多。我尝试在线搜索,但无法理解模型搜索功能中的$criteria->compare()函数。

我希望那些显示为小列表。我怎样才能做到这一点? 我的观点:

    $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'car-type-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
        'columns' => array(
                'title'
    ),
));

我的控制员:

public function actionIndex()
{
    $model=new EeCarTypes('search');
    $model->unsetAttributes();

    $this->render('index',array('model'=>$model));
}

和我的模特:

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

    $criteria=new CDbCriteria;

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

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

1 个答案:

答案 0 :(得分:1)

我认为你的模特有很好的关系。

在您看来:

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'car-type-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns' => array(
        'title',
        array(            
            'name'=>'Class',
            'type' => 'raw',
            //call the method 'gridDataColumn' from the controller
            'value'=>array($this,'gridDataColumn'), 
        ), 
    ),
));

在您的控制器中:

//called on rendering the column for each row 
protected function gridDataColumn($data,$row)
{
    $cellValue = "<ul>";
    foreach($data->classifiers as $classifier) {
        $cellValue .= "<li>" . $classifier->class . '</li>';
    }
     $cellValue .= "</ul>";
    return $cellValue;    
}