IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Est-il possible de faire des requêtes non triviales avec Symfony ?


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 71
    Points : 60
    Points
    60
    Par défaut 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 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
    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.

  2. #2
    Membre habitué
    Ingénieur d'études et de développement
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur d'études et de développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    Pourquoi ne pas faire ta requête en PDO si vraiment tu n'y arrives pas avec Doctrine ?

  3. #3
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Points : 178
    Points
    178
    Par défaut
    pour avoir tenté plusieurs, la réponse est non. Tu auras plus vite fait de la faire en PDO

Discussions similaires

  1. Est il possible de faire des border raduis avec Internet Explorer
    Par Alpha14 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 23/02/2010, 17h02
  2. Réponses: 3
    Dernier message: 22/07/2009, 12h04
  3. Est-il possible de faire des classes autoinstanciées ?
    Par All Jinx dans le forum Débuter
    Réponses: 7
    Dernier message: 22/08/2008, 17h36
  4. Est-il possible de faire une requête hiérarchique ?
    Par Christophe Charron dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 21/03/2007, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo