Contagem de linhas no Doctrine 2
Eu estou tentando recuperar comentários de uma tabela Comentário que tem id, jogo (uma chave estrangeira) e data.
Toda vez que eu pedir comentários, quero receber 3 comentários classificados por data para um jogo específico e quero saber se há mais comentários para mostrar depois. Para isso, escrevi duas funções, a primeira retorna os três comentários:
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();
E o segundo retorna o número de comentários que eu poderia obter mais tarde. O motivo desta função é mostrar um botão "Mais comentários" ou não. Esta é a segunda função:
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;
}
Mas a segunda função não funciona para o próximo erro:
Erro fatal: exceção não capturada 'Doctrine \ ORM \ NoResultException' com mensagem 'Nenhum resultado foi encontrado para consulta, embora pelo menos uma linha fosse esperada.
Qual eu acho que é devido a usar setFirstResult e count ().
Então eu usei
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);
}
O que obviamente é ruim escrito porque eu não deveria obter os dados apenas por uma contagem. Como eu poderia escrever a segunda função corretamente?
Desde já, obrigado.