Count Rows in Doctrine QueryBuilder Count Rows in Doctrine QueryBuilder symfony symfony

Count Rows in Doctrine QueryBuilder


Something like:

$qb = $entityManager->createQueryBuilder();$qb->select('count(account.id)');$qb->from('ZaysoCoreBundle:Account','account');$count = $qb->getQuery()->getSingleScalarResult();

Some folks feel that expressions are somehow better than just using straight DQL. One even went so far as to edit a four year old answer. I rolled his edit back. Go figure.


Here is another way to format the query:

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


It's better to move all logic of working with database to repositores.

So in controller you write

/* you can also inject "FooRepository $repository" using autowire */$repository = $this->getDoctrine()->getRepository(Foo::class);$count = $repository->count();

And in Repository/FooRepository.php

public function count(){    $qb = $repository->createQueryBuilder('t');    return $qb        ->select('count(t.id)')        ->getQuery()        ->getSingleScalarResult();}

It's better to move $qb = ... to separate row in case you want to make complex expressions like

public function count(){    $qb = $repository->createQueryBuilder('t');    return $qb        ->select('count(t.id)')        ->where($qb->expr()->isNotNull('t.fieldName'))        ->andWhere($qb->expr()->orX(            $qb->expr()->in('t.fieldName2', 0),            $qb->expr()->isNull('t.fieldName2')        ))        ->getQuery()        ->getSingleScalarResult();}

Also think about caching your query result - http://symfony.com/doc/current/reference/configuration/doctrine.html#caching-drivers

public function count(){    $qb = $repository->createQueryBuilder('t');    return $qb        ->select('count(t.id)')        ->getQuery()        ->useQueryCache(true)        ->useResultCache(true, 3600)        ->getSingleScalarResult();}

In some simple cases using EXTRA_LAZY entity relations is good
http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/tutorials/extra-lazy-associations.html