如何限制主要实体而不是儿童的结果?

时间:2018-07-02 06:41:08

标签: php symfony doctrine symfony3.x

如何限制主要实体而不是儿童的结果?

如果我这样做:

    $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,则表示效果很好。

2 个答案:

答案 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