2016-04-09 11 views
0

私は3つのテーブル/エンティティがあります。ドクトリン2/symfonyの多くの一つになったオブジェクト

  • ゲーム

  • SiteGamesを

  • サイト

私は、クエリを記述する必要がありますDoctrine 2では、特定のサイトで利用できるすべてのゲーム(オブジェクトとして)を取得します(この仕様を取得しましたオブジェクトとしてficサイト)。通常、生のSQLは次のようになり

  • ゲーム/ game_id
  • サイト/

をSITE_ID:(ワンへの多く) 関係だけでは、テーブル/エンティティSiteGameであり、それが列/オブジェクトが含まれています(と動作します):

SELECT g FROM site_games s INNER JOIN games g ON g.id=s.game_id WHERE site_id='4'; 

を私は教義に試みたが失敗したこの何:

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb->select("s.game") 
      ->from("MyBundle:SiteGame","s") 
      ->where("s.site = :site") 
      ->setParameter("site",$site); 

エラー:パスエクスプレッションが無効です。 StateFieldPathExpressionでなければなりません。

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb->select("g") 
      ->from("MyBundle:SiteGame","s") 
      ->join("s.game","g") 
      ->where("s.site = :site") 
      ->setParameter("site",$site); 

エラー:少なくとも1つのルートエンティティエイリアスを選択せず​​に、識別変数でエンティティを選択できません。

さらに、さまざまな組み合わせで同様のエラーが発生します。

インターネット全体に役立つものは見つかりませんでした。

答えて

0

GamesエンティティにはOneToManyという関係がありません。SiteGamesに戻ると思います。あなたはここにいくつかのオプションがあります。

  • SiteGames場合はちょうどgame他の属性を持っていないとsiteあなたがようGames
  • に追加OneToManyマッピングをそのエンティティを完全に削除し、適切なManyToManyマッピング

  • を使用することができますdoctrine 2.4では、任意の結合構文を使用して、次のように書くことができます。

    $this->getEntityManager()->createQueryBuilder() 
        ->select('Game') 
        ->from('MyBundle:Game', 'Game') 
        ->join('MyBundle:SiteGame', 'SiteGame', 'WITH', 'SiteGame.game = Game AND SiteGame.site = :site') 
        ->setParameter('site', $site) 
        ->getQuery() 
        ->getResult(); 
    

私は最初のオプションを使用します。

+0

任意の構文が助けてくれました!助けてくれてありがとう! :) – DanielSz

関連する問題