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 :

Récupérer un ID avec le QueryBuilder [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Points : 20
    Points
    20
    Par défaut Récupérer un ID avec le QueryBuilder
    Bonjour à tous et à toutes,

    Je fais un peu le bilan de mes requêtes dans mon application et je m'aperçois que j'en fais un petit peu trop alors que cela pourrait être plus concis (notamment la faute à l'utilisation conjointe de setMaxResults() et de left join, mais ne crachons pas dans la soupe).

    Dans l'idée de simplifier et de réduire le nombre de requêtes, j'ai besoin d'une fonction dans mon Foo repository qui me permettrait de récupérer UNIQUEMENT un id (et pas une entité Foo) avec des JOIN par dessus

    J'ai tenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        public function getIdInChevreAndMouton($chevreId, $moutonId)
        {
            return $this
                ->createQueryBuilder('SELECT partial f.{id} FROM Foo f')
                ->leftJoin('f.chevre', 'che')
                ->leftJoin('f.mouton', 'mou')
     
                ->where('mou.id = :moutonId')
                ->andWhere('che.id = :chevreId')
                ->andWhere('f.isHappy = false')
     
                ->setParameter('chevreId', $chevreId)
                ->setParameter('chevreId', $chevreId)
     
                ->getQuery()->getSingleScalarResult();
        }

    Malheureusement, cela me retourne une syntax error. J'ai également essayé de virer le mot clé PARTIAL mais ça ne fonctionne toujours pas.

    Une idée pour récupérer l'id de mon Foo ?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    L'utilisation de partial est inutile dans ton cas. PARTIAL te permet de retourner un objet avec une partie des valeurs remplies uniquement.
    Si j'ai bien compris ce que tu veux, ce n'est pas un objet mais uniquement un id.

    À la va-vite, un truc comme ça devrait faire l'affaire (attention aux erreurs de copier-coller dans ton code : deux fois $chevreId)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $qb = $this->_em->createQueryBuilder();
    $qb
        ->select('f.id')
        ->from('BundleShortName:Foo')
     
        ->leftJoin('f.mouton', 'mou', 'WITH', 'mou.id = :moutonId')
        ->setParameter('moutonId', $moutonId)
     
        ->leftJoin('f.chevre', 'che', 'WITH', 'che.id = :chevreId')
        ->setParameter('chevreId', $chevreId)
     
        ->where('f.isHappy = :isHappy')
        ->setParameter('isHappy', FALSE)
    ;
     
    return $qb->getQuery()->getSingleScalarResult();
    ++

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 20
    Points : 20
    Points
    20
    Par défaut
    Cela fonctionne à la perfection, merci !

    J'avais entre temps trouvé une autre solution qui renvoyait un array qui contenait un array dont la première case était l'id recherché, mais bon avec ta solution on l'a direct ^^

    Merci encore, résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer une valeur avec un textarea
    Par Viau dans le forum Langage
    Réponses: 6
    Dernier message: 14/02/2006, 17h09
  2. Réponses: 3
    Dernier message: 10/02/2006, 15h31
  3. Newbie en XML: récupérer le contenu avec de l'ASP
    Par yoda_style dans le forum ASP
    Réponses: 3
    Dernier message: 13/01/2006, 11h46
  4. [VB.NET] [ODBC] Récupérer des valeurs avec requête ODBC?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/03/2005, 16h38
  5. Réponses: 2
    Dernier message: 29/03/2004, 13h44

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