php - framework - Doctrina: Contar los elementos de una entidad con una condición
doctrine2 php web framework (2)
¿Cómo puedo contar los elementos de una entidad con una condición en Doctrine? Por ejemplo, me doy cuenta de que puedo usar:
$usersCount = $dm->getRepository(''User'')->count();
Pero eso solo contará todos los usuarios. Me gustaría contar solo aquellos que tienen empleado de tipo. Yo podría hacer algo como:
$users = $dm->getRepository(''User'')->findBy(array(''type'' => ''employee''));
$users = count($users);
Eso funciona pero no es óptimo. ¿Hay algo como lo siguiente:?
$usersCount = $dm->getRepository(''User'')->count()->where(''type'', ''employee'');
Bueno, puedes usar QueryBuilder para configurar una consulta COUNT
:
Suponiendo que $dm
es el administrador de su entidad.
$qb = $dm->createQueryBuilder();
$qb->select($qb->expr()->count(''u''))
->from(''User'', ''u'')
->where(''u.type = ?1'')
->setParameter(1, ''employee'');
$query = $qb->getQuery();
$usersCount = $query->getSingleScalarResult();
O simplemente puedes escribirlo en DQL :
$query = $dm->createQuery("SELECT COUNT(u) FROM User u WHERE u.type = ?1");
$query->setParameter(1, ''employee'');
$usersCount = $query->getSingleScalarResult();
Es posible que los recuentos deban estar en el campo de identificación, en lugar del objeto, que no se puedan recuperar. Si es así, simplemente cambie COUNT(u)
o ->count(''u'')
a COUNT(u.id)
o ->count(''u.id'')
o como se ->count(''u.id'')
su campo de clave principal.
Esta pregunta tiene 3 años, pero hay una manera de mantener la simplicidad de findBy () para contar con criterios.
En tu repositorio puedes agregar este método:
public function countBy(array $criteria)
{
$persister = $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName);
return $persister->count($criteria);
}
Entonces tu código se verá así:
$criteria = [''type'' => ''employee''];
$users = $repository->findBy($criteria, [''name'' => ''ASC''], 0, 20);
$nbUsers = $repository->countBy($criteria);