1

ゲーム、プラットフォーム (PC、XBOX、PS3 など) と画像の 3 つのエンティティがあります。

ゲームは多くのプラットフォームでリリースでき、プラットフォームは多くのゲームに関連付けることができ、最後にゲームには多くのボックス カバー (たとえば、プラットフォームごとに 1 つ) を含めることができます。

これらの 3 つのエンティティを結合テーブルで関連付けたいと考えています。私はいくつかの読書をして、関係を説明するために別のエンティティを作成する必要があることを発見しました。

これで、game_id、platform_id、および image_id フィールドを持つ 4 番目のエンティティ GameCovers ができました。すべてが機能しているようです-教義によって生成されたゲッターとセッター。私の質問は、DB からデータを取得するにはどうすればよいですか?

Game Enity には、次のメソッドがあります。

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

しかし、たとえば PC などの 1 つのプラットフォームだけのボックス カバーを取得するにはどうすればよいですか?

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();
}

これは明らかに単純化された例ですが、重要な点はゲッターに依存するのではなく、独自のクエリを作成することです....

于 2012-10-30T12:00:21.067 に答える
0

$em->getRepository('GameCover')->findOneBy(array('platform' => $platform, 'game' => $game))プラットフォームとゲームがそれぞれのオブジェクトまたは ID である場合、それは簡単です。

GameCover のカスタム リポジトリを使用して、別の方法でこれを行うことができます。

getGameCovers を使用すると、すべてのゲーム カバーを保持するプロキシの初期化がトリガーされ、doctrine はそれらすべてをデータベースから取得します。したがって、これを行いたくない場合は、必要な特定のものを GameCover リポジトリから取得してください。

于 2012-10-30T13:20:46.423 に答える