Comment trier findAll Doctrine de la méthode
J'ai lu la documentation de Doctrine, mais je n'ai pas été en mesure de trouver un moyen de résoudre findAll() Résultats.
Je suis en utilisant symfony2 + doctrine, c'est la déclaration que je suis en utilisant à l'intérieur de mon Contrôleur:
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();
mais je veux les résultats pour être ordonné par ordre croissant des noms d'utilisateurs.
J'ai essayé de passer un tableau en argument de cette façon:
findAll( array('username' => 'ASC') );
mais il ne fonctionne pas (il ne se plaint pas non plus).
Est-il un moyen de le faire sans la construction d'une requête DQL?
Vous devez vous connecter pour publier un commentaire.
Comme @Lighthart comme indiqué, oui c'est possible, mais il ajoute beaucoup de graisse à la commande et n'est pas SÈCHE.
Vous devriez vraiment définir votre propre requête dans l'entité de référentiel, c'est simple et les meilleures pratiques.
Alors vous devez dire à votre entité à regarder pour les requêtes dans le référentiel:
Enfin, dans votre contrôleur:
Simple:
Il est utile de regarder le code source parfois.
Par exemple
findAll
mise en œuvre est très simple (vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php
):Si nous regardons
findBy
et de trouver ce dont nous avons besoin (orderBy
)Cela fonctionne pour moi:
En gardant le premier tableau vide, extrait le dos de toutes les données, cela a fonctionné dans mon cas.
Oeil à la Doctrine de l'API de code source :
Vous avez besoin d'utiliser un critère, par exemple:
Vous pouvez trier un existant de type arraycollection l'aide d'un tableau d'itérateur.
en supposant que $collection est votre type arraycollection retourné par findAll()
Cela peut facilement être transformée en une fonction que vous pouvez mettre dans votre dépôt afin de créer findAllOrderBy() la méthode.
Je utiliser une alternative à la solution qui a écrit nifr.
C'est plus rapide que la COMMANDE PAR clause, et sans les frais de l'Itérateur.
Essayez ceci:
méthode findBy dans Symfony si l'on excepte deux paramètres. La première est la matrice de champs que vous voulez faire la recherche et le deuxième tableau est le champ de tri et de son ordre
Modifier la valeur par défaut findAll fonction dans l'objet entityrepository comme ceci:
De cette façon, vous pouvez utiliser le bouton "findAll" sur n'importe quelle requête pour les données de la table avec une option pour trier la requête