Symfony 2 + Doctrine, joining 3 tables
我有3个实体:游戏,平台(例如PC,XBOX,PS3等)和图片。
游戏可以在很多平台上发布,平台可以与很多游戏相关,最后游戏可以具有很多盒装封面(例如,每个平台一个)。
我想通过连接表关联这3个实体。
我做了一些阅读,发现我应该创建另一个实体来描述关系,并且我做到了。
现在我有第四个实体GameCovers,其字段为:game_id,platform_id和image_id。
一切似乎都有效-教义产生的吸气剂和吸气剂。我的问题是如何从数据库获取数据?
现在在Game Enity中,我有方法:
1 2 3 4 5 6 7 8 9 | /** * Get game_covers * * @return Doctrine\\Common\\Collections\\Collection */ public function getGameCovers() { return $this->game_covers; } |
但是我如何只为一个平台获取盒盖呢?例如:PC?
您应该看一下自定义实体存储库:
http://symfony.com/doc/2.0/book/doctrine.html#custom-repository-classes
然后在每种方法中
1 2 3 4 5 6 | # Fetch all the games that have PC release public function getPcGames(){ $q = $entityManager->createQuery("SELECT gc,p,g FROM GameCover gc JOIN gc.platform p JOIN gc.game g WHERE p.name = :platformName"); $q->setParameter('platformName', 'PC'); return $q->getResult(); } |
很明显,这是在简化示例上,但是关键不是要依靠getter而是要创建自己的查询....
这很容易,
您可以使用GameCover的自定义存储库,通过另一种方法为您执行此操作。
如果使用getGameCovers,则会触发包含所有游戏封面的代理的初始化,并且学说将从数据库中获取所有这些游戏封面。因此,如果您不想执行此操作,只需从GameCover存储库中获取所需的特定对象即可。