Menu

Obtenir les objets d'une entité dans un ordre aléatoire avec Doctrine

Avant tout,

nous aurons besoin d'installer la librairie créée par beberlei qui permettra d'utiliser certaines fonctions indispensables.

Vous pourrez retrouver toute la documentation de la librairie directement sur https://github.com/beberlei/DoctrineExtensions.

composer require beberlei/doctrineextensions


Quand l'installation est terminée,

nous allons nous rendre sur le fichier config/services.yaml pour y ajouter les lignes suivantes :

doctrine:
     orm:
         dql:
             numeric_functions:
                 rand: DoctrineExtensions\Query\Mysql\Rand


Nous pouvons passer à la pratique,

Il suffit maintenant de créer votre repository et votre requête à l'aide de createQueryBuilder() puis y ajouter la fonction RAND() qui devra se trouver dans orderBy().

Vous pourrez retrouvez la documentation de doctrine directement sur https://symfony.com/doc/current/doctrine.html.


Les exemples :

Notre repository :

$repository = $this->getDoctrine()->getRepository(Article::class);


Récupérer tous les objets d'une entité dans un ordre aléatoire :

$articles = $repository->createQueryBuilder('a')
            ->orderBy('RAND()')
            ->getQuery()
            ->execute();


Récupérer 3 objets aléatoires d'une entité :

$articles = $repository->createQueryBuilder('a')
            ->orderBy('RAND()')
            ->setMaxResults(3)
            ->getQuery()
            ->execute();





Catégorie :
Symfony 4
Vues :
961