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 :
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 :
Puis tout simplement, dans votre repository, vous pourrez utilisez la fonction "Rand()" dans votre orderBy() avec votre Query Builder de la façon suivante :
Et voilà le tour est joué !
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é !