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

ORM PHP Discussion :

+Doctrine : récupération du résultat d'une colonne MAX(x) dans un SELECT


Sujet :

ORM PHP

  1. #1
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut +Doctrine : récupération du résultat d'une colonne MAX(x) dans un SELECT
    En conformité avec documentation pour Doctrine, j'essaye de récupérer une information comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $vp = Doctrine_Query::create()
      ->select('MAX(v.rang) AS max_rang')
      ->from('VitrineParagraphe v')
      ->where('v.vitrine_id = ?', $vitrineId)
      ->execute();
    Les logs m'indiquent que la requête exécutée est la suivante :
    SELECT MAX(v.rang) AS v__0 FROM vitrine_paragraphe v WHERE (v.vitrine_id = ?) - (17)
    Du coup, impossible d'accéder comme prévu (toujours selon la doc) à l'attribut $vp->max_rang qui me permettra de connaitre la valeur recherchée.

    Pourquoi l'alias que j'indique est-il ignoré par Doctrine ? Savez-vous comment je dois procéder pour exploiter ce type de requêtes ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Essaye de remplacer ta dernière ligne par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ->execute(array(); Doctrine::HYDRATE_ARRAY);
    et fais un var_dump du résultat pour voir si c'est exploitable.

    Sinon en dernier recours tu peux aussi essayer HYDRATE_NONE

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Salut

    Je me demande si la doc est bonne.

    $vp c'est une Doctrine_Collection, tu dois pas pouvoir l'utiliser directement dessus, par contre si tu parcours ta collection ca marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($vps as $vp)
    {
       echo $vp->getMaxRang(); // ou echo $vp->max_rang
    }
    A moins que ce soit le GROUP BY de l'exemple qui soit manquant.

  4. #4
    Invité
    Invité(e)
    Par défaut
    En fait la doc est bonne mais l'utilisation n'est pas la même que celle de Herode. Dans la doc, le count est fait sur une table jointe et non sur la table "principale".

  5. #5
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Exact. J'ai d'ailleurs utilisé ce même type de requêtes avec agrégation autre part, sur une table jointe, et sans le moindre problème. C'est vraiment curieux et ennuyeux que ce soit si compliqué à utiliser dans le cas le plus simple de requête sur une seule table

    Merci pour vos réponses en tout cas, je n'ai pas eu le temps de tester, je vous confirme que ça marche (ou pas...) dès que ce sera fait.

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Au lieu d'un ->execute(), vous faîtes un ->fetchOne() et pas besoin de boucler inutilement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $vp = Doctrine_Query::create()
      ->select('MAX(v.rang) AS max_rang')
      ->from('VitrineParagraphe v')
      ->where('v.vitrine_id = ?', $vitrineId)
      ->fetchOne();
     
    echo $vp->getMaxRang();
    Le topic date un peu mais ça peut servir ^^

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/04/2011, 11h13
  2. Réponses: 3
    Dernier message: 10/11/2010, 17h20
  3. Réponses: 3
    Dernier message: 08/03/2007, 11h45
  4. Réponses: 4
    Dernier message: 26/05/2006, 08h59
  5. Récupération du résultat d'une commande shell
    Par klu dans le forum Langage
    Réponses: 8
    Dernier message: 16/02/2006, 23h34

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