我有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,
));
}
答案 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;
}