如何限制主要实体而不是儿童的结果?
如果我这样做:
$queryBuilder = $em->createQueryBuilder();
$queryBuilder->select('n, c');
$queryBuilder->from('AppBundle:News', 'n');
$queryBuilder->leftJoin('n.comments', 'c');
$queryBuilder->setMaxResults(3);
$results = $queryBuilder->getQuery()->getResult();
第一个新闻有3条评论,然后结果仅返回一条记录新闻。如果我没有评论,或者我删除了leftJoin,则表示效果很好。
答案 0 :(得分:-1)
您为结果使用了错误的变量。
您正在使用$queryBuilder
来准备您的声明:
$queryBuilder = $em->createQueryBuilder();
但是用$qb
来获得结果;
$results = $qb->getQuery()->getResult();
答案 1 :(得分:-1)
在连接,多个位置和分页中,Doctrine的行为可能异常。
推荐的方法是使用Paginator,而不是直接调用getResults。 分页器将结果分组到主要实体。
编辑:提供一些示例代码:
<?php
use Doctrine\ORM\Tools\Pagination\Paginator;
$dql = "SELECT p, c FROM BlogPost p JOIN p.comments c";
$query = $entityManager->createQuery($dql)
->setFirstResult(0)
->setMaxResults(100);
$paginator = new Paginator($query, $fetchJoinCollection = true);
$c = count($paginator);
foreach ($paginator as $post) {
echo $post->getHeadline() . "\n";
}
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/tutorials/pagination.html