2012-02-16 11 views
5

मेरी डेटाबेस में मैं 5 टेबल है:Yii एकाधिक संबंधों

  • खेल (game_id, नाम, ...)
  • टैग (tag_id, नाम, ...)
  • संग्रह (coll_id, नाम, ...)
  • collections_tags (आईडी, coll_id, tag_id)
  • game_tag (आईडी, game_id, tag_id)

हर खेल में कई है टैग, संग्रह में कई टैग हैं। अगर मैं संग्रह लेता हूं, तो मैं संग्रह के टैग का उपयोग करके अपने गेम ढूंढ सकता हूं।

मैं Yii संबंधों के साथ इस कार्य को करने के कोशिश कर रहा हूँ:

//in Collection's relations: 
'tags'=>array(self::MANY_MANY, 'Tag', 'collections_tags(coll_id,tag_id)'), 
'games'=>array(self::HAS_MANY, 'Game','tag_id', 'through'=>'tags') 

तो मैं एक $ संग्रह मिलता है और इस प्रयास करें:

echo "collection ".$collection->name.": (id=".$collection->coll_id.") has ".count($collection->tags)."tags\n"; 
echo count($coll->games);//error here 

और कोई त्रुटि मिलती है
क्या में गलत है संबंध?

उत्तर

6

आप यहाँ देख सकते हैं: http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through, कि संबंध की सही घोषणा के रूप में निम्नानुसार होगा:

'games'=>array(self::HAS_MANY, 'Game', array('tag_id'=>'id'), 'through'=>'tags') 
+0

उदाहरण आप मुझे दिया (yiiframework.com पर) वे "भूमिका" मॉडल का उपयोग करें। क्या मेरे मामले में संग्रह_टैग मॉडल का उपयोग करना आवश्यक है? या एक नई कक्षा के निर्माण के बिना कुछ कामकाज है? – lvil

+0

यह आवश्यक नहीं हो सकता है, लेकिन यदि कोई रास्ता है, तो यह बहुत कठिन होगा और आपको ढांचे के एआर कोड में खोदना होगा। आप दस्तावेज़ीकरण में निम्नलिखित "सिद्धांत" पा सकते हैं: "संबंधपरक क्वेरी करने के लिए हम एआर का उपयोग करने से पहले, हमें एआर को यह जानने की जरूरत है कि एक एआर क्लास दूसरे से कैसे संबंधित है"। तो एआर मॉडल के साथ काम करता है। यह ऐसा ही है। –