2011-03-14 5 views
3

Doctrine 2を使用して、内部結合を使用してクエリを実行しようとしています。私はサイトエンティティとページエンティティを持っています。各サイトは多数のページを持つことができ、各ページは1つのサイトにしか属しません。私は私のページテーブルの行にsite_id外部キーを持っています。私のサイトエンティティでは、ターゲットエンティティが私のページエンティティであり、mappedByがサイトに設定されているOneToManyアソシエーションを作成しました。Doctrine 2クエリが内部結合の一部を欠いています

マイページエンティティでは、ターゲットエンティティがサイトに設定されているManyToOne関連付けがあります。ここで

/** 
* @var App\Entity\Site 
* @ManyToOne(targetEntity="Site") 
*/ 
private $site; 

は、私は、特定のサイトIDを渡している私のクエリビルダ文です:

SELECT s0_.id AS id0, s0_.domain AS domain1 FROM sites s0_ INNER JOIN WHERE s0_.id = ? 

方法を参照してください:

$qb = $this->_em->createQueryBuilder(); 
$qb->select('s') 
    ->from('App\Entity\Site', 's') 
    ->innerJoin('s.pages', 'p') 
    ->where('s.id = :id') 
    ->setParameter('id', $id); 

、ここでは、私は戻って取得実際のSQLですINNER JOINの情報は完全に欠落していますか?私はここで何か間違っているのですか、それともDoctrine 2の問題ですか?

答えて

0

はそれを考え出しました。私のmappedByステートメントはSiteエンティティで正しくありませんでした。私は "サイト"を指していたとき、それは "サイト"だったはずです。

3

あなたが明示的にこれらの列を取得するために教義を伝える必要があります:

$qb->select('s', 'p') 
    ->form(...) 
    ->join(...) 
+0

私がそこに含まれている限り、私が選んだものは重要ではありません。私の本当の質問では、私は 'p'を含んでいますが、私は疑問を簡素化するためにクエリから無関係なものをすべて削除しました。 –

関連する問題