2012-02-16 70 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