131 votes

Comment trier la méthode de findAll Doctrine ?

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 symfony2 + doctrine, voici la déclaration que j'utilise dans mon contrôleur :

$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();

mais je veux que les résultats soient classés par noms d'utilisateurs ascendants.

J'ai essayé de passer un tableau comme argument de cette façon :

findAll( array('username' => 'ASC') );

mais cela ne fonctionne pas (il ne se plaint pas non plus).

Existe-t-il un moyen de faire cela sans construire une requête DQL ?

250voto

Pier-Luc Gendreau Points 2288

Comme l'a montré @Lighthart, oui c'est possible, bien que cela ajoute beaucoup de poids au contrôleur et ne soit pas DRY.

Vous devriez vraiment définir votre propre requête dans le référentiel d'entités, c'est simple et c'est la meilleure pratique.

use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
    public function findAll()
    {
        return $this->findBy(array(), array('username' => 'ASC'));
    }
}

Ensuite, vous devez indiquer à votre entité de rechercher les requêtes dans le référentiel :

/**
 * @ORM\Table(name="User")
 * @ORM\Entity(repositoryClass="Acme\UserBundle\Entity\Repository\UserRepository")
 */
class User
{
    ...
}

Enfin, dans votre contrôleur :

$this->getDoctrine()->getRepository('AcmeBundle:User')->findAll();

89voto

Stiig Points 1206
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findBy([], ['username' => 'ASC']);

27voto

Daniele Dolci Points 448

Simple :

$this->getDoctrine()->getRepository('AcmeBundle:User')->findBy(
    array(),
    array('username' => 'ASC')
);

24voto

how Points 950

Il est utile de regarder le code source parfois.

Par exemple findAll est très simple ( vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php ) :

public function findAll()
{
    return $this->findBy(array());
}

Nous regardons donc findBy et trouver ce dont nous avons besoin ( orderBy )

public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)

7voto

Buttler Points 71

Cela fonctionne pour moi :

$entities = $em->getRepository('MyBundle:MyTable')->findBy(array(),array('name' => 'ASC'));

Garder le premier tableau vide permet de récupérer toutes les données, cela a fonctionné dans mon cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X