SymfonyプロジェクトでDoctrineを使用すると私が混乱します。単一のエンティティからすべての行を要求するとき、同じテーブルを別のテーブルに結合するときに得られるよりも多くの行が得られます。これより左結合のクエリが少ない行を返します
$query = $this->getEntityManager()->createQueryBuilder();
$query->select('obj')
->from('AppBundle:Data', 'obj');
:
$query = $this->getEntityManager()->createQueryBuilder();
$query->select('obj')
->from('AppBundle:Data', 'obj')
->leftJoin('obj.subDatas', 'sd')
->leftJoin('sd.subSubDatas', 'ssd');
はどのようにそれはそうかもしれない
この
は、より多くの行を返すのですか?私はこれがinnerJoinの場合に当てはまると思いますが、結果は少なくともleftJoinを使用するときには多かれ少なかれ行になると考えました。これは予想されますか?
UPDATE
だから私はこの混乱の実際の原因は、上記のクエリの後に改ページを追加しているように見えることを考え出し:
$query
->setMaxResults(20)
->setFirstResult(0);
これは(上記の使用leftJoinとうまく機能していないようですこれは最初の例では結果の数が正しい理由です)。 leftJoinsを使用するときに、正しい行数を返すようにするにはどうすればよいですか?
repoメソッドの最後に 'return $ query-> getResult() - > getSQL()'を使用して、実際のsqlコードがどのように生成されているかを確認できます。デバッグの目的で使用します。 –
はい、左結合では、同じ条件の内部結合と同じ行数と、少なくとも左テーブルと同じ数の行を返す必要があります。しかし、[mcve]がなければ、私たちは入力と出力が何であるか本当に分かりません。 – philipxy
上記の私の質問では、bd参照を修正し、問題と思われるページネーションに関する質問を追加しました。 – theva