He estado leyendo la documentación de Doctrine, pero no he podido encontrar una manera de ordenar los resultados de findAll ().
Estoy usando la doctrina symfony2 +, esta es la declaración que estoy usando dentro de mi controlador:
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();
pero quiero que los resultados se ordenen por nombres de usuario ascendentes.
He intentado pasar una matriz como argumento de esta manera:
findAll( array('username' => 'ASC') );
pero no funciona (tampoco se queja).
¿Hay alguna forma de hacer esto sin crear una consulta DQL?
fuente
fuente
Sencillo:
fuente
A veces es útil mirar el código fuente.
Por ejemplo, la
findAll
implementación es muy simple (vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php
):Entonces miramos
findBy
y encontramos lo que necesitamos (orderBy
)fuente
Esto funciona para mi:
Mantener la primera matriz vacía recupera todos los datos, funcionó en mi caso.
fuente
Mira el código fuente de la API de Doctrine:
fuente
Debe utilizar un criterio, por ejemplo:
fuente
El método findBy en Symfony exceptúa dos parámetros. Primero está la matriz de campos en los que desea buscar y la segunda matriz es el campo de clasificación y su orden
fuente
Puede ordenar una ArrayCollection existente utilizando un iterador de matriz.
asumiendo que $ collection es su ArrayCollection devuelta por findAll ()
Esto se puede convertir fácilmente en una función que puede poner en su repositorio para crear el método findAllOrderBy ().
fuente
Prueba esto:
fuente
Utilizo una alternativa a la solución que escribió nifr.
Es más rápido que la cláusula ORDER BY y sin la sobrecarga del Iterador.
fuente
Modifique la función findAll predeterminada en EntityRepository de esta manera:
De esa manera, puede usar '' findAll '' en cualquier consulta para cualquier tabla de datos con una opción para ordenar la consulta
fuente