2011-04-13 26 views
7

Tôi có mô hình có liên kết has_many.Sử dụng CGridView cho liên kết của mô hình

Hãy chỉ nói Sinh viên có nhiều khóa học.

Tôi muốn hiển thị tất cả các khóa học của một sinh viên cụ thể sử dụng CGridView.

Something như thế này:

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

Cũng cố gắng new CActiveDataProvider($model->courses) như dataProvider nhưng vẫn wont làm việc.

Có cách nào dễ dàng để thực hiện việc này không? Hay tôi phải tạo một tiêu chuẩn tìm kiếm trên mô hình Khóa học với một số tiêu chí được lấy từ mô hình sinh viên theo cách thủ công?

Trả lời

13
  1. Loại bỏ các dấu ngoặc đơn sau khi khóa học

  2. Sử dụng một arraydataprovider

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

Nó hoạt động! Cảm ơn! – Engwan

0

Một số điều cần bắt đầu:

  1. Tôi nghĩ rằng nó phải được $model->courses thay vì $model->courses()
  2. Lý do mà không hoạt động nào là quan hệ AR Yii của trả về một mảng các đối tượng, không phải là một đối tượng DataProvider thực tế

Dù sao thì, tôi dường như cũng đang phải vật lộn với điều này. Tôi chưa bao giờ thực sự làm việc như tôi muốn. Gần nhất tôi đã nhận được thiết lập biến 'dữ liệu' trong dataProvider của tôi, nhưng sau đó phân trang đã bị hỏng trong ListView của tôi. Nó đã hoạt động như sau:

$dataProvider=new CActiveDataProvider('Course', array(
    'data'=>$model->courses, 
)); 

Điều tôi đã làm là tạo ra các tiêu chí mới để chuyển vào DataProvider của tôi đã thực hiện tương tự như mối quan hệ. Giống như vậy:

$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, 
)); 

Tôi giả định rằng bạn đang sử dụng mối quan hệ MANY_MANY với bảng tham gia. Tôi hy vọng điều này sẽ giúp, mặc dù tôi chắc chắn nó không hoàn toàn là những gì bạn muốn làm. Nếu có ai có giải pháp tốt hơn, hãy chia sẻ! Tôi cũng muốn tìm hiểu về nó! :)

Các vấn đề liên quan