1

我有一个 Book 实体,它与 Page 实体有 One2Many 关系。我想创建一个查询来检索所有至少有一页的书。我做了:

       $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();                

问题是,虽然有很多书有页面,但这个查询只返回一本书。

创建的查询是:

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')

你不需要聚合函数。简而言之:这个内部连接将只返回可以与至少一个页面连接的书籍。

于 2012-09-14T10:32:56.567 回答
1

You should add groupBy as you are using aggregate function. e.g.

  $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 回答