Est-il possible de faire des requêtes non triviales avec Symfony ?
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 :
Code:
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 |
requête écrite en 5 minutes et fonctionnant au premier coup (pas même d'erreur de syntaxe !).
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.