我在2个模型之间有HAS_MANY关系,我使用bookID作为外键
模型1 - 导入的书籍,导入的书籍可以有多个CountryOfImport
public function relations()
{
return array(
'CountryOfImportObj'=>array(self::HAS_MANY, 'CountryOfImport', 'bookID')
);
}
模型2 CountryOfImport ,CountryOfImport属于Importedbooks
public function relations()
{
return array(
'ImportBooksObj'=>array(self::BELONGS_TO, 'Importedbooks', 'bookID')
);
}
现在,对于我的CGridView,我使用了Importedbooks模型的model-> search()作为我的dataProvider,从这里开始我就被困住了。
CGridView
$data = $model->search();
$data->setPagination(array('pageSize'=>'5'));
$data->criteria->addCondition('active = "yes"');
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$data
,'filter'=>$model
,'pager'=>array('header'=>'')
,'columns'=>array(
'id',
'bookYear',
'bookTitle',
'DISPLAY VALUE FROM OTHER model HERE'
)
)
);
导入图书模型的DataProvider,我将其用作网格的数据提供者
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('bookID',$this->bookID);
$criteria->compare('countryName',$this->countryName,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
该关系有效,因为我可以在我的控制器中使用以下代码从另一个模型中获取字段(countryName)
$model = Importedbooks::model()->with('CountryOfImportObj')->findbyPK(3);
print_r($model->CountryOfImportObj[0]->countryName);
答案 0 :(得分:1)
例如,Importedbooks有许多CountryOfImport,您必须在一行中显示或显示所有国家/地区名称或concreet名称,具体取决于ID或countryName或其他一些属性。
您可以将匿名函数作为值传递:
'columns' => array(
'id',
'bookYear',
'bookTitle',
array(
'header' => 'Countries',
'type' => 'raw',
// if you have defined counrtyName attribute in 'Importedbooks' model, if not you can remove this row
// also CGridView 'uses' attribute 'name' for filtering or sorting
'name' => 'countryName',
'value' => function($data, $row) { //$data is item of DataProvider, $row is number of row (starts from 0)
$countries = CHtml::listData((array)$data->CountryOfImportObj, 'id', 'countryName');
return implode(', ', $countries);
}
)
)
如果您想要按外部属性进行过滤或排序,则必须" declare them"
谢谢!