Comment classer les résultats avec findBy () dans Doctrine

147

J'utilise la findBy()méthode sur un référentiel Doctrine:

$entities = $repository->findBy(array('type'=> 'C12'));

Comment puis-je commander les résultats?

Mirage
la source

Réponses:

307

Le deuxième paramètre de findByest pour ORDER.

$ens = $em->getRepository('AcmeBinBundle:Marks')
          ->findBy(
             array('type'=> 'C12'), 
             array('id' => 'ASC')
           );
xdazz
la source
7
Apparemment, la documentation de l'API sur le site Web de doctrine ne correspond pas au code source réel. github.com/doctrine/doctrine2/blob/2.4/lib/Doctrine/ORM/… montre que vous avez raison.
Patrick James McDougle
Puis-je définir un ordre multiple par?
Fabien Papet
9
Un peu tard pour trouver cette question, mais pour quiconque s'interroge à ce sujet, oui, vous pouvez ajouter plusieurs "ordre par", ajoutez simplement plus d'éléments dans ce second tableau de paramètres et définissez les noms de champ "ASC" ou "DESC". IE: array('priority'=>'ASC','id'=>'ASC').
Aaron Belchamber
1
Et si AcmeBinBundle: Marks est lié ManyToOne avec "produit" et que nous voulons commander par un champ dans l'objet produit? Est-ce possible?
Rodolfo Velasco
2
@RodolVelasco findByest utilisé pour la scène de requête de base, pour une scène plus compliquée, utilisez plutôt une requête. comme $qb = $em->getRepository('AcmeBinBundle:Marks')->createQueryBuilder('m')->....
xdazz
25
$ens = $em->getRepository('AcmeBinBundle:Marks')
              ->findBy(
                 array(), 
                 array('id' => 'ASC')
               );
Jethik
la source
10
$cRepo = $em->getRepository('KaleLocationBundle:Country');

// Leave the first array blank
$countries = $cRepo->findBy(array(), array('name'=>'asc'));
Bhaktaraz
la source