使用CGridView进行模型关联

| 我有一个具有has_many关联的模型。 假设学生有很多课程。 我想显示使用CGridView的特定学生的所有课程。 像这样:
$this->widget(\'zii.widgets.grid.CGridView\', array(                                                 
  \'dataProvider\' => $model->courses,                                                             
  \'columns\'=>array(                                                                                                                                                                            
    \'name\',                                                                                                                                                                                  
  ),                                                                                                 
));
还尝试了“ 1”作为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,
));
我最终要做的是创建新标准,以传递给与关系相同的数据提供者。像这样:
$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关系与联接表一起使用。我希望这会有所帮助,即使我确定这不是您要执行的操作。如果有人有更好的解决方案,请分享!我也想了解它! :)     

要回复问题请先登录注册