2012-02-16 57 views
5

在我的數據庫我有5個表:Yii的多重關係

  • 遊戲(game_id,姓名,...)
  • 標籤(TAG_ID,姓名,...)
  • 集合(coll_id,名,...)
  • collections_tags(ID,coll_id,TAG_ID)
  • game_tag(ID,game_id,TAG_ID)

每場比賽有很多標籤,集合有很多標籤。如果我收藏,我可以使用收藏的標籤找到它的遊戲。

我試圖執行與警予的關係這一任務:

//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)他們使用「角色」模式的例子。在我的情況下是否有必要使用collections_tags模型?或者有一些解決方法,而不創建一個新的類? – lvil 2012-02-19 07:23:47

+0

它可能不是必需的,但如果有辦法,這將是非常艱難的,你將不得不挖掘框架的AR代碼。您可以在文檔中找到以下「原則」:「在我們使用AR執行關係查詢之前,我們需要讓AR知道一個AR類與另一個AR類是如何關聯的」。所以AR適用於模型。這就是來龍去脈。 – 2012-02-19 19:45:17