Cuenta de filas en Doctrina 2
Estoy intentando recuperar comentarios de una mesa Comentario que tiene id, juego (una clave externa) y fecha.
Cada vez que solicito comentarios, deseo obtener 3 comentarios ordenados por fecha para un juego específico y quiero saber si hay más comentarios para mostrar más adelante. Para eso, he escrito dos funciones, la primera devuelve los tres comentarios:
public function getRecentComments($offset,$id) {
$dql = "SELECT c FROM Comment c
WHERE c.game = ?1
ORDER BY c.date DESC";
$query = $this->getEntityManager()->
createQuery($dql)->
setParameter(1, (int)$id)->
setMaxResults(3)->
setFirstResult($offset);
return $query->getResult();
Y el segundo devuelve el número de comentarios que podría obtener más tarde. La razón de esta función es que luego mostramos un botón "Más comentarios" o no. Esta es la segunda función:
public function moreComments($offset,$id) {
$dql = "SELECT COUNT(c.id) FROM Comment c
WHERE c.game = ?1
ORDER BY c.date DESC";
$query = $this->getEntityManager()
->createQuery($dql)
->setParameter(1, (int)$idPartido)
->setFirstResult($offset+3)
->setMaxResults(1)
->getSingleScalarResult();
return $query;
}
Pero la segunda función no funciona para el siguiente error:
Error grave: excepción no detectada 'Doctrine \ ORM \ NoResultException' con mensaje 'No se encontraron resultados para la consulta, aunque se esperaba al menos una fila.
Lo cual creo que se debe usar setFirstResult y count ().
Asi que he usado
public function moreComments($offset,$id) {
$dql = "SELECT c FROM Comentario c
WHERE c.partido = ?1
ORDER BY c.fecha DESC";
$query = $this->getEntityManager()
->createQuery($dql)
->setParameter(1, (int)$idPartido)
->setFirstResult($offset+3)
->setMaxResults(1)
->getSingleScalarResult();
return sizeof($query);
}
Lo que obviamente está mal escrito porque no debería obtener los datos solo para un conteo. ¿Cómo podría escribir la segunda función correctamente?
Gracias por adelantado.