1

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

游戏可以在很多平台上发布,平台可以关联很多游戏,最后游戏可以有很多盒盖(比如每个平台一个)。

我想通过连接表关联这 3 个实体。我做了一些阅读,发现我应该创建另一个实体来描述关系,我做到了。

现在我有第四个实体 GameCovers 字段:game_id、platform_id 和 image_id。一切似乎都有效 - 教义生成了 getter 和 setter。我的问题是如何从数据库中获取数据?

在 Game Enity 现在我有方法:

/**
* Get game_covers
*
* @return Doctrine\Common\Collections\Collection 
*/
public function getGameCovers()
{
   return $this->game_covers;
}

但是我如何只为一个平台获取盒盖,例如:PC?

4

2 回答 2

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,而是创建自己的查询......

于 2012-10-30T12:00:21.067 回答
0

这很简单,$em->getRepository('GameCover')->findOneBy(array('platform' => $platform, 'game' => $game))其中平台和游戏是各自的对象或 ID。

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

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

于 2012-10-30T13:20:46.423 回答