Symfony 2 学说,连接3个表



我有3个实体:游戏,平台(例如PC,Xbox,PS3等)和图像。

游戏可以在许多平台上发布,平台可以与许多游戏有关,最后游戏可以具有许多盒子盖(例如,每个平台一个)。

我想通过加入表将这三个实体联系起来。我做了一些阅读,发现我应该创建另一个实体来描述关系,然后我做了。

现在,我拥有带有字段的第四个实体游戏:game_id,platform_id and image_id。一切似乎都起作用 - 学说产生的getters和setter。我的问题是如何从DB获取数据?

在游戏源中,我有方法:

/**
* Get game_covers
*
* @return DoctrineCommonCollectionsCollection 
*/
public function getGameCovers()
{
   return $this->game_covers;
}

但是如何仅获取一个平台的盒盖:PC?

您应该查看自定义实体存储库:http://symfony.com/doc/2.0/book/doctrine.html#custom-repository-close-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();
}

显然,这超出了简化的示例,但是关键点不是依靠getters,而是创建您自己的查询....

很容易, $em->getRepository('GameCover')->findOneBy(array('platform' => $platform, 'game' => $game))平台和游戏是相应的对象或IDS。

您可以将自定义存储库用于GameCover,以不同的方法为您执行此操作。

如果您使用getgamecovers,则触发持有所有游戏封面的代理的初始化,而学说将从数据库中获取所有内容。因此,如果您不想这样做,只需从GameCover存储库中获取您想要的特定元素。

相关内容

  • 没有找到相关文章

最新更新