2011-04-13 4 views
7

has_many 연관이있는 모델이 있습니다.모델 연결에 CGridView 사용

학생이 많은 코스를 갖고 있다고 가정 해 봅시다.

저는 CGridView를 사용하여 특정 학생의 모든 과정을 보여 드리고 싶습니다. 이 같은

뭔가 :

$this->widget('zii.widgets.grid.CGridView', array(             
    'dataProvider' => $model->courses,                
    'columns'=>array(                                           
    'name',                                             
),                         
)); 

또한의 dataProvider로 new CActiveDataProvider($model->courses)을 시도했지만 여전히 일을 실 거예요.

쉬운 방법이 있나요? 또는 학생 모델에서 수작업으로 취한 몇 가지 기준으로 Course 모델에서 검색 기준을 만들어야합니까?

답변

13
  1. 사용 arraydataprovider에게 과정 후 괄호의

    $this->widget('zii.widgets.grid.CGridView', array(
        'dataProvider' => new CArrayDataProvider($model->courses, array()), 
        'columns'=>array(
        'name', 
    ), 
    )); 
    
+0

을 없애 그것은 작동! 감사! – Engwan

0

몇 가지 시작합니다 :

  1. 을 나는 그것이
  2. 어쨌든 작동 YII의 AR 관계는, 오브젝트의 배열을 아닌 반납하지 않는 이유 $model->courses 대신 $model->courses()해야한다고 생각 실제 DataProvider 객체

어쨌든, 나는 이것에 대해서도 고심하고 있습니다. 나는 그것을 실제로 원했던 것처럼 결코 작동하지 못했다. 가장 가까운 것은 dataProvider에서 'data'변수를 설정하는 것이었지만 다음으로 ListView에서 페이징이 끊어졌습니다. 그것은이 같은 근무 : 나는 관계와 같은 일을 한 내 DataProvider에에 전달하는 새로운 기준을 작성하고 일을 결국 무엇

$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 관계를 사용하고 있다고 가정합니다. 나는 이것이 당신이하고 싶은 일이 아니라고 확신하지만, 이것이 도움이되기를 바랍니다. 누구든지 더 나은 해결책을 가지고 있다면 공유하십시오! 나는 그것에 대해서 너무 배우고 싶다! :)

관련 문제