J'ai lu la documentation de Doctrine, mais je n'ai pas réussi à trouver un moyen de trier les résultats de findAll ().
J'utilise la doctrine symfony2 +, c'est la déclaration que j'utilise dans mon Controller:
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();
mais je veux que les résultats soient classés par nom d'utilisateur croissant.
J'ai essayé de passer un tableau comme argument de cette façon:
findAll( array('username' => 'ASC') );
mais ça ne marche pas (ça ne se plaint pas non plus).
Existe-t-il un moyen de le faire sans créer une requête DQL?
la source
la source
Facile:
la source
Il est parfois utile de consulter le code source.
Par exemple, l'
findAll
implémentation est très simple (vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php
):Donc nous regardons
findBy
et trouvons ce dont nous avons besoin (orderBy
)la source
Cela fonctionne pour moi:
Garder le premier tableau vide récupère toutes les données, cela a fonctionné dans mon cas.
la source
Regardez le code source de l'API Doctrine:
la source
Vous devez utiliser un critère, par exemple:
la source
La méthode findBy de Symfony exclut deux paramètres. Le premier est le tableau des champs sur lesquels vous souhaitez effectuer la recherche et le deuxième tableau est le champ de tri et son ordre
la source
Vous pouvez trier un ArrayCollection existant à l'aide d'un itérateur de tableau.
en supposant que $ collection est votre ArrayCollection retournée par findAll ()
Cela peut facilement être transformé en une fonction que vous pouvez mettre dans votre référentiel afin de créer la méthode findAllOrderBy ().
la source
Essaye ça:
la source
J'utilise une alternative à la solution qui a écrit nifr.
C'est plus rapide que la clause ORDER BY et sans la surcharge de l'itérateur.
la source
Modifiez la fonction findAll par défaut dans EntityRepository comme ceci:
De cette façon, vous pouvez utiliser le '' findAll '' sur n'importe quelle requête pour n'importe quelle table de données avec une option pour trier la requête
la source