2012-03-18 14 views
1

私はエンティティドライバとエンティティカーを持っています。 1人のドライバーが多くの車を持っている。 私は、次のDQLクエリがある:symfony2/doctrine2 - dql文onetoMany

$query = $this->getEntityManager()->createQuery('select d, c FROM driver d JOIN d.cars c WHERE c.color=:color');     
$query->setParameter('color', $color); 
$query->setFirstResult((int)$offset ? $offset*15 : 0); 
$query->setMaxResults(15); 

resultlistは5行があります。しかし、私はコンソールで作成されたSQLクエリを実行すると、私は15行があります。 結合タイプを左結合に変更すると、ドライバーではなく、車でカウントされます。しかし、私は赤い車を持っているドライバーを読むためにページャーを使っています。

誰かが間違っていることを知っていますか? ありがとうございます。

答えて

3

Doctrineを使用して結合クエリをフェッチするとき、各エンティティに対して複数の行が返されます。これらのクエリでsetMaxResultsを使用すると、一部のエンティティは破棄されます。

はこれを読む:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#first-and-max-result-items-dql-query-only

ソリューションはここにある:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/pagination.html

+0

グレート答えを!ページネーションについて、それについて読む、私はそれが同じ大規模なデータセットのためのキラー高価な操作だと仮定することができます... –

+0

キャッシュはこの場合あなたの友人です – Maxence

+0

素晴らしい! –