Obtenir les résultats d'un "Select" ordonnés de façon aléatoire avec Doctrine

Lundi 26 avril 2021

Chaque développeur Php Symfony connaît la difficulté d'obtenir des lignes / enregistrements aléatoires via Doctrine.
En effet, il n’existe pas de solution native et malheureusement, l’équipe de doctrine n’est même pas disposée à mettre en œuvre cette fonctionnalité !

La solution la plus simple est la plus rapide que j'ai donc trouvé est d'installer le vendor : "beberlei/doctrineextensions" en exécutant la commande suivante à la racine de votre projet :


composer require beberlei/doctrineextensions



Celui-ci ajoute de nombreuses fonctionnalités dont celle qui nous intéresse le "Rand" (Pour les autres fonctionnalités, je vous invite à consulter la doc : https://github.com/beberlei/DoctrineExtensions).

Dans votre fichier de config doctrine.yaml, ajoutez les lignes suivantes :


// doctrine.yaml
doctrine:
     orm:
         dql:
             numeric_functions:
                 rand: DoctrineExtensions\Query\Mysql\Rand



Puis tout simplement, dans votre repository, vous pourrez utilisez la fonction "Rand()" dans votre orderBy() avec votre Query Builder de la façon suivante :


$query->addSelect('column')->orderBy('RAND()'); 



Et voilà le tour est joué !

En cliquant sur "Accepter", vous m'autorisez à utiliser des cookies pour réaliser des statistiques de visite.