2011-04-13 20 views
7

के लिए CGridView का उपयोग करना मेरे पास has_many एसोसिएशन वाला एक मॉडल है।मॉडल के एसोसिएशन

चलो बस कहना है कि छात्र के कई पाठ्यक्रम हैं।

मैं CGridView का उपयोग कर किसी विशेष छात्र के सभी पाठ्यक्रम दिखाना चाहता हूं।

कुछ इस तरह:

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

इसके अलावा new CActiveDataProvider($model->courses) dataProvider के रूप में करने की कोशिश की, लेकिन अभी भी अभ्यस्त काम।

क्या ऐसा करने का कोई आसान तरीका है? या क्या मुझे कोर्स मॉडल पर मैन्युअल रूप से छात्र मॉडल से लिया गया कुछ मानदंडों के साथ एक खोज मानदंड बनाना है?

उत्तर

13
  1. पाठ्यक्रम के बाद एक arraydataprovider

  2. उपयोग

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

कोष्ठकों से छुटकारा यह काम करता है! धन्यवाद! – Engwan

0

कुछ बातें शुरू करने के लिए:

  1. मुझे लगता है कि यह $model->courses बजाय $model->courses() होना चाहिए
  2. कारण यह है कि वैसे भी काम नहीं करता है कि Yii के एआर संबंधों में ऑब्जेक्ट की श्रृंखला लौटने के लिए, नहीं एक है वास्तविक डेटाप्रोवाइडर ऑब्जेक्ट

वैसे भी, मुझे इसके साथ संघर्ष करना याद रखना प्रतीत होता है। मैं इसे वास्तव में काम करने के लिए नहीं मिला जैसे मैं चाहता था। मेरे पास सबसे नज़दीक मेरे डेटा प्रदाता में 'डेटा' वैरिएबल सेट कर रहा था, लेकिन फिर पेजिंग को मेरी सूची दृश्य में तोड़ दिया गया था। यह कुछ इस तरह काम किया:

$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 संबंध का उपयोग कर रहे हैं। मुझे उम्मीद है कि यह मदद करता है, भले ही मुझे यकीन है कि यह काफी नहीं है जो आप करना चाहते हैं। अगर किसी के पास बेहतर समाधान है तो कृपया साझा करें! मैं इसके बारे में भी जानना चाहता हूं! :)