2013-01-03 21 views
11

मान लीजिए कि मेरे पास मॉडल User है जिसमें friends नामक कई संबंध हैं। तो $user->friends (या $model->friends देखें) मुझे User ऑब्जेक्ट्स की एक सरणी देता है। मैं दोस्तों को ग्रिडव्यू के रूप में प्रदर्शित करना चाहता था। लेकिन CGridView डेटा dataProvider ऑब्जेक्ट के रूप में। इसके लिए गुगलिंग मॉडल ऑब्जेक्ट्स की सरणी को नीचे दिए गए अनुसार dataProvider ऑब्जेक्ट में परिवर्तित करने का तरीका मिला।मॉडल डेटा ऑब्जेक्ट सरणी को डेटा में कनवर्ट करने के लिए कैसे करें

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'gridUser', 
    'dataProvider' => new CArrayDataProvider($model->friends, array()), 
)); 

अब इस का उपयोग करते हुए मैं एक त्रुटि

संपत्ति "User.id" परिभाषित नहीं है मिलता है।

अद्यतन

public function relations() 
{ 
    return array(
     'friends' => array(self::MANY_MANY, 'User', 'friendship(user_id, friend_id)'), 
    ); 
} 
+0

जोड़ना कि आप कैसे संबंध परिभाषित करते हैं और दो मॉडल कैसे संबंधित हैं (पीके और एफके) उत्तर पाने के लिए महत्वपूर्ण है! –

उत्तर

18

मैं दो चरण प्रदाता नीचे दिखाया गया के निर्माण का उपयोग करें। लेकिन मैंने पाया कि यह आपको अंकन के मामले में परेशानी देता है। मैं के बाद से अन्य बातों के

$dataProvider = new CArrayDataProvider('User'); 
$dataProvider->setData($model->friends); 
$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'gridUser', 
    'dataProvider' =>$dataProvider, 
)); 

(एपीआई डॉक्स से नीचे उदाहरण देखें) कहा जा रहा है, अपने कोड काम करना चाहिए कर रहा हूँ कि समस्या का समाधान करने के लिए परेशान नहीं है। मुझे संदेह है कि प्रदान किए गए कोड की तुलना में आपके संबंधों में गलत विशेषता है। पुन: जाँच संबंध परिभाषा अगर यह ठीक

है Yii डॉक्स से:

$rawData=Yii::app()->db->createCommand('SELECT * FROM tbl_user')->queryAll(); 
// or using: $rawData=User::model()->findAll(); <--this better represents your question 
$dataProvider=new CArrayDataProvider($rawData, array(
    'id'=>'user', 
    'sort'=>array(
     'attributes'=>array(
      'id', 'username', 'email', 
     ), 
    ), 
    'pagination'=>array(
     'pageSize'=>10, 
    ), 
)); 
+0

को सटीक चीज़ मिल गई जो मैं खोज रहा था, वैसे भी धन्यवाद दोस्त। आपके जवाब पर भी अंगूठे। – prashu132

+0

सटीक उत्तर जो मैं खोज रहा था नीचे दिया गया है। कृपया इसकी जांच करें और अगर यह उपयोगी – prashu132

+2

ग्रेट है कि मैं मदद की थी :) –

13

मिल गया :), मैं CArrayDataProvider के बजाय CActiveDataProvider उपयोग कर सकते हैं नीचे के लिए

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'gridUser', 
    'dataProvider' => new CActiveDataProvider('User', array(
      'data'=>$model->friends, 
    )), 
    //...... columns display list..... 
)); 

फिर भी धन्यवाद दिया के रूप में उत्तर @Stefano

+4

यह एक बेहतर उत्तर है, क्योंकि यह सीएमडियल से ग्रिड हेडर लाने के लिए CGridView को सक्षम बनाता है ... – Gero