我有3个实体:游戏,平台(如PC,XBOX,PS3等)和图像。
游戏可以在很多平台上发布,平台可以与很多游戏相关,最后游戏可以有很多盒子(例如每个平台一个)。
我想通过连接表来关联这3个实体。 我做了一些阅读,发现我应该创建另一个实体来描述关系,我做了。
现在我有第四个实体GameCovers,其中包含以下字段:game_id,platform_id和image_id。 一切似乎都有效 - 学说生成了吸气剂和二传手。我的问题是如何从数据库中获取数据?
在Game Enity中我现在有方法:
/**
* Get game_covers
*
* @return Doctrine\Common\Collections\Collection
*/
public function getGameCovers()
{
return $this->game_covers;
}
但是我如何仅为一个平台获取盒子封面,例如:PC?
答案 0 :(得分:1)
您应该查看自定义实体存储库: http://symfony.com/doc/2.0/book/doctrine.html#custom-repository-classes
在每个方法中,您将createQuery
,例如:
# 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而是创建自己的查询....
答案 1 :(得分:0)
这很容易,$em->getRepository('GameCover')->findOneBy(array('platform' => $platform, 'game' => $game))
平台和游戏是相应的对象或ids。
您可以使用GameCover的自定义存储库以不同的方法为您执行此操作。
如果您使用getGameCovers,您将触发持有所有游戏封面的代理的初始化,并且学说将从数据库中获取所有这些内容。因此,如果您不想这样做,只需从GameCover存储库中获取您想要的特定内容即可。