8768 sujets
Développement web côté serveur, CMS
moko a écrit :
Bonsoir à tous,
J'aimerais savoir s'il y a une manière de sélectionner un certain nombre de lignes de manière aléatoire dans une table? j'ai essayé avec un createQuery mais visiblement symfony a du mal avec RAND() (et avec d'autres fonctions SQL d'ailleurs )
Merci pour vos pistes
comment ça RAND() fonctionne mal avec SF ? peux-tu détailler ?
JENCAL a écrit :
comment ça RAND() fonctionne mal avec SF ? peux-tu détailler ?
Visiblement non : Error: Expected known function, got 'rand'
voici ma query :
$entityManager = $this->getEntityManager();
$query = $entityManager->createQuery(
"SELECT q FROM App\Entity\Question q order by rand() LIMIT 3 ");
$result= $query->execute();
Ok, effectivement c'est un problème de Doctrine 2
https://stackoverflow.com/questions/10762538/how-to-select-randomly-with-doctrine#answer-10762751
https://stackoverflow.com/questions/10762538/how-to-select-randomly-with-doctrine#answer-10762751
Bonjour,
Tu peux utiliser le Bundle DoctrineExtension qui ajoute le support des fonctions SQL non prises en charge nativement par Doctrine:
https://github.com/beberlei/DoctrineExtensions
Je l'utilise dans mes QueryBuilder et ça fonctionne nickel.
Tu dois juste ajouter ceci à ta conf doctrine, pour ajouter le support de RAND:
Tu peux utiliser le Bundle DoctrineExtension qui ajoute le support des fonctions SQL non prises en charge nativement par Doctrine:
https://github.com/beberlei/DoctrineExtensions
Je l'utilise dans mes QueryBuilder et ça fonctionne nickel.
Tu dois juste ajouter ceci à ta conf doctrine, pour ajouter le support de RAND:
# Doctrine Configuration
doctrine:
orm:
dql:
numeric_functions:
rand: DoctrineExtensions\Query\Mysql\Rand
Raphi a écrit :
Bonjour,
Tu peux utiliser le Bundle DoctrineExtension qui ajoute le support des fonctions SQL non prises en charge nativement par Doctrine:
https://github.com/beberlei/DoctrineExtensions
Je l'utilise dans mes QueryBuilder et ça fonctionne nickel.
Tu dois juste ajouter ceci à ta conf doctrine, pour ajouter le support de RAND:
# Doctrine Configuration doctrine: orm: dql: numeric_functions: rand: DoctrineExtensions\Query\Mysql\Rand
Super.. J'avais require ce bundle mais je n'avais pas ajouté la function dans la config
JENCAL a écrit :
oué, mais perso, j'aurais utilisé le random de php et je l'aurais envoyé en param...
Pour le Random, c'est sur que PHP peut faire l'affaire, mais ça fait un traitement de supplémentaire.
Par contre pour d'autre type de fonction SQL, c'est super utile de le faire directement et de ne pas avoir à retraiter derrière en PHP.
Raphi a écrit :
Bonjour,
Tu peux utiliser le Bundle DoctrineExtension qui ajoute le support des fonctions SQL non prises en charge nativement par Doctrine:
https://github.com/beberlei/DoctrineExtensions
Je l'utilise dans mes QueryBuilder et ça fonctionne nickel.
Tu dois juste ajouter ceci à ta conf doctrine, pour ajouter le support de RAND:
# Doctrine Configuration doctrine: orm: dql: numeric_functions: rand: DoctrineExtensions\Query\Mysql\Rand
Bon j'ai ajouté cette extension dans le doctrine.yaml mais je continue à avoir une erreur (Error: Expected end of string, got 'RAND')
J'ai rajouté ORDER BY (je l'avais enlevé entre temps) .. maintenant c'est avec LIMIT qu'il y a un probleme (Error: Expected end of string, got 'LIMIT')
Modifié par moko (28 May 2019 - 15:40)