Ce n'est pas la première fois que passé la récupération d'une table, d'un tuple ou de tables liées symfony/doctrine me bloque dans la constitution d'une requête un peu élaborée et que la documentation n'apporte aucune réponse.
D'où le ton acidulé du titre
Un exemple simple et très courant :
j'ai un historique de grandeurs et leurs valeurs liées à une entité quelconque ; je veux ne récupérer que les dernières valeurs en date de chaque grandeur.
En SQL on à une requête de la forme :
requête écrite en 5 minutes et fonctionnant au premier coup (pas même d'erreur de syntaxe !).
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select * from historique where (grandeur, date) in (select grandeur, max(date) as date from historique where ... group by grandeur
Après 3 h et maintes tentatives, il semble strictement impossible de faire cette requête sous symfony/doctrine, même au plus bas niveau, sans avoir une erreur, un refus, le résultat non sous forme de tableau, découper la requête en deux, l'obligation de faire à la main autant de requête que de grandeurs disponibles, etc.
Il semblerait d'après le manuel que des requêtes imbriquées par un IN puissent être faites à condition :
- de ne pas dépasser une colonne (apparemment symfony/doctrine n'aime pas les parenthèses dans les requêtes ... comme c'est dommage),
- donner les valeurs du IN pour une seule requête (le second select ne pourrait pas retourner plusieurs tuples).
Comme la documentation fait défaut, quelqu'un aurait-il une solution pour effectuer cette (simple) requête courante dans cet environnement ?
Ou le moyen de fusionner les résultats de plusieurs requêtes identiques (comment utiliser merge() et comment instancier la collection qui va recueillir le tout ?).
Merci.
Partager