1

PageエンティティとOne2Manyの関係にあるBookエンティティがあります。少なくとも1ページあるすべての本を取得するクエリを作成したかったのです。やった:

       $qb = $this->getDoctrine()
        ->getRepository('AcmeDemoBundle:Book')
        ->createQueryBuilder('b');          
        ->leftJoin('b.pages','p')
        ->having($qb->expr()->gt($qb->expr()->count('p'), 0));

       $books = $qb
        ->getQuery()
        ->getResult();                

問題は、ページを持っている本はたくさんありますが、このクエリは1冊の本しか返さないということです。

作成されるクエリは次のとおりです。

SELECT b FROM Acme\DemoBundle\Entity\Book b LEFT JOIN b.pages p HAVING COUNT(p) > 0

それは私にはうまく見えます。何が間違っているのか考えてみませんか?

4

2 に答える 2

2

使い方は簡単です

->innerJoin('b.pages','p')

それ以外の

->leftJoin('b.pages','p')

集計関数は必要ありません。つまり、この内部結合は、少なくとも1つのページで結合できるブックのみを返します。

于 2012-09-14T10:32:56.567 に答える
1

groupBy集計関数を使用しているので、追加する必要があります。例えば

  $qb = $this->getDoctrine()
    ->getRepository('AcmeDemoBundle:Book')
    ->createQueryBuilder('b');          
    ->leftJoin('b.pages','p')
    ->groupBy('b.id')
    ->having($qb->expr()->gt($qb->expr()->count('p'), 0));
于 2012-09-13T22:56:09.607 に答える