使用CGridView模型的关联
问题描述:
我有has_many关联的模型。使用CGridView模型的关联
让我们只说学生有很多课程。
我想使用CGridView显示特定学生的所有课程。
事情是这样的:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $model->courses,
'columns'=>array(
'name',
),
));
也试过new CActiveDataProvider($model->courses)
作为dataProvider,但仍然无法正常工作。
有没有简单的方法来做到这一点?还是必须在课程模型中创建一个搜索条件,并且手动从学生模型中获取一些条件?
答
获取课程后去掉括号
-
使用arraydataprovider
$this->widget('zii.widgets.grid.CGridView', array( 'dataProvider' => new CArrayDataProvider($model->courses, array()), 'columns'=>array( 'name', ), ));
答
有几件事情,开始:
- 我觉得应该是
$model->courses
而不是$model->courses()
- 不反正工作是Yii中的AR关系返回对象的数组,而不是原因实际的DataProvider对象
无论如何,我似乎还记得与此一起努力。我从来没有像我想要的那样工作。我得到的最接近的是在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关系。我希望这会有所帮助,尽管我确信它不是你想要的。如果有人有更好的解决方案,请分享!我也想了解它! :)
它的工作原理!谢谢! – Engwan 2011-04-14 02:32:33