[symfony] QueryBuilder에서 행 수 계산



Answers

다음은 쿼리의 서식을 지정하는 또 다른 방법입니다.

return $repository->createQueryBuilder('u')
            ->select('count(u.id)')
            ->getQuery()
            ->getSingleScalarResult();
Question

Doctrine의 QueryBuilder를 사용하여 쿼리를 작성하고 있는데 쿼리의 결과 총 수를 얻고 싶습니다.

$repository = $em->getRepository('FooBundle:Foo');

$qb = $repository->createQueryBuilder('n')
        ->where('n.bar = :bar')
        ->setParameter('bar', $bar);

$query = $qb->getQuery();

//this doesn't work
$totalrows = $query->getResult()->count();

이 쿼리에 대한 계산을 실행하여 총 행을 얻고 싶지만 실제 결과는 반환하지 않습니다. (이 카운트 쿼리 이후에는 페이지 매김을 위해 maxResults를 사용하여 쿼리를 추가로 수정하려고합니다.)




groupBy 와 같이 좀 더 복잡한 쿼리를 계산할 필요가 있다면 ... Doctrine\ORM\Tools\Pagination\Paginator 에서 빌릴 수 있습니다 :

$paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query);
$totalRows = count($paginator);






몇 가지 항목 (오프셋) 이후에 항목을 계산하려면 $ qb-> setFirstResults ()를이 조건에 적용 할 수 없습니다. 이는 쿼리 조건이 아닌 선택된 항목 범위에 대한 쿼리 결과의 오프셋으로 작동하기 때문입니다 즉, setFirstResult를 COUNT와 함께 사용해야합니다. 따라서 항목을 계산하기 위해 남은 항목은 다음과 같습니다.

   //in repository class:
   $count = $qb->select('count(p.id)')
      ->from('Products', 'p')
      ->getQuery()
      ->getSingleScalarResult();

    return $count;

    //in controller class:
    $count = $this->em->getRepository('RepositoryBundle')->...

    return $count-$offset;

누구나 더 깨끗한 방법을 알고 있니?




Related