La solicitud de recuento de Symfony QueryBuilder devuelve "matriz"
Frecuentes
Visto 4,201 veces
2
Estoy tratando de hacer una solicitud de conteo en un campo de identificación.
Tengo el siguiente código en mi controlador:
$qb = $em->createQueryBuilder();
$qb->select('count(c.id)')
->from('MyBundle:Category', 'c')
->where('c.author = :aut')
->setParameter('aut', $author);
$result = $qb->getQuery()->getResult();
return $this->render('MyCategoryBundle:Category:categories.html.twig', array(
'categories' => $categories,
'result' => $result
));
Y en mi view.html.twig :
{% for category in categories %}
<li>
{{ category.title }}
{% for total in result %}
{{ total }}
{% endfor %}
</li>
{% endfor %}
Devuelve el título de la categoría y la cadena "Array" justo además. Qué estoy haciendo mal ?
2 Respuestas
3
EL getResult()
devuelve una matriz (colección) de objetos. Tienes que usar el getSingleScalarResult()
función para obtener el resultado como un número simple.
De todos modos, ¿cuál es el objetivo de su código? Si desea mostrar la cantidad de categorías para cada autor, es posible que su código no funcione ya que muestra una lista de categorías pero solo cuenta las categorías de un autor.
Respondido el 19 de diciembre de 18 a las 12:12
0
Prueba esto:
$qb = $em->createQueryBuilder();
$qb->select('count(c.id) AS cnt')
->from('MyBundle:Category', 'c')
->where('c.author = :aut')
->setParameter('aut', $author);
$result = $qb->getQuery()->getResult();
y luego en ramita {{result.cnt}}
respondido 29 nov., 13:12
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas symfony count query-builder or haz tu propia pregunta.
Ah vale, no lo sabía. Sí, quiero mostrar el número de categorías de un autor. Obtengo su id con $author var. - usuario2094540
Entonces, ¿por qué usas un
for
bucle en las categorías? - AlabamaEso se debió a los resultados de mi matriz usando getResults(). Estaba equivocado de hecho. Funciona con getSingleScalarResult() y elimina el bucle en la vista. Gracias por tu ayuda y explicación! - usuario2094540