我有一个带有has_many关联的模型。
我们只想说学生有很多课程。
我想使用CGridView显示特定学生的所有课程。
这样的事情:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $model->courses,
'columns'=>array(
'name',
),
));
还尝试new CActiveDataProvider($model->courses)
作为dataProvider,但仍无法正常工作。
有一种简单的方法吗?或者我是否必须在课程模型上创建一个搜索条件,并手动从学生模型中获取一些标准?
答案 0 :(得分:13)
在课程
使用arraydataprovider
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => new CArrayDataProvider($model->courses, array()),
'columns'=>array(
'name',
),
));
答案 1 :(得分:0)
开始时要做的一些事情:
$model->courses
而不是$model->courses()
无论如何,我似乎记得也在努力解决这个问题。我从来没有像我想要的那样真正地工作。我得到的最接近的是在我的dataProvider中设置'data'变量,但是我的ListView中的分页被破坏了。它的工作原理如下:
$dataProvider=new CActiveDataProvider('Course', array(
'data'=>$model->courses,
));
我最终做的是创建新标准以传递给我的DataProvider,它与关系做同样的事情。像这样:
$criteria=new CDbCriteria;
$criteria->join = "JOIN student_course_relation_table sc ON sc.course_id = t.id";
$criteria->compare('sc.student_id',$model->id);
$dataProvider=new CActiveDataProvider('Course', array(
'criteria'=>$model->courses,
));
我假设您正在使用与连接表的MANY_MANY关系。我希望这会有所帮助,即使我确定这不是你想要做的。如果有人有更好的解决方案请分享!我也想了解它! :)