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

Doctrine2 PHP Discussion :

Joindre trois requêtes


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 53
    Par défaut Joindre trois requêtes
    Bonjour,

    Je souhaite regrouper 3 requêtes mais j'avoue avoir du mal pour savoir comment m'y prendre.


    Le but serait d'avoir un tableau avec les trois valeurs...

    Voici les 3 requêtes...

    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
    17
    18
    19
    20
    21
     
       // On récupére le dernier nom inscript par un membre et qui soit visible
        $nom = $this->getDoctrine()
                    ->getManager()
                    ->getRepository('OpengenGeoBundle:PaysNom') 
    		->findOneBy(array( 'visible' => 1, 'pays' => $id_pays ),
                             array('date' => 'desc')
                             );
     
        $initial = $this->getDoctrine()
                    ->getManager()
                    ->getRepository('OpengenGeoBundle:PaysInitiale') 
    		->findOneBy(array( 'visible' => 1, 'pays' => $id_pays ),
                             array('date' => 'desc')
                             );           
       $nom_classement = $this->getDoctrine()
                    ->getManager()
                    ->getRepository('OpengenGeoBundle:PaysNomClassement') 
    		->findOneBy(array( 'visible' => 1, 'pays' => $id_pays ),
                             array('date' => 'desc')
                             );
    C'est jouable via les jointures ? ou vaut mieux t'il faire 3 requêtes ?

    Merci pour vos lumières.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 31
    Par défaut
    je ne sais pas quel est la nature du relation entre tes 3 tables, me en tts cas le jointure est possible avec QueryBuilder
    par exemple dans le repository du l'entité PaysNom vous créé une fonction que retourne le résulta du votre jointure souhaitée. c'est juste une simple lumière comme vous avez demandé . maintenant vous pouvez faire un petit recherche dans google pour comprendre comment utiliser QueryBuilder. c'est simple.
    bon dev.
    mes respects.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 53
    Par défaut
    Bonsoir,

    En fait j'ai un objet Pays relié à 3 sous-objets :

    Pays -> OnetoMany -> PaysInitiale
    Pays -> OnetoMany -> PaysNomClassement
    Pays -> OnetoMany -> PaysNom

    Le but est d'obtenir pour mon objet pays, le dernier enregistrement de chaque sous-objets.

    - Avec Querybuilder j'en suis là :

    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
    17
     
        public function getLastInfo($id_pays)
    {
       $qb = $this->createQueryBuilder('p') 
               ->where('p.id = :id_pays')
               ->setParameter('id_pays', $id_pays)
               ->leftJoin('p.paysnoms', 'n')
               ->addSelect('n')
               ->leftJoin('p.paysinitiales', 'i')
               ->addSelect('i')
               ->leftJoin('p.paysnomclassements', 'nc')
               ->addSelect('nc');
     
     
       return $qb->getQuery()->getArrayResult();
     
    }
    Le soucis c'est pour filtrer les sous objets... je ne vois pas comment ne garder que le sous-objet le plus récent. (j'ai un champs datetime pour chaque sous objet).

    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 31
    Par défaut
    ok ce bon, chaque entité a un id oui, par habituellement les id sont tous auto-incrément like thes ça @ORM\GeneratedValue(strategy="AUTO"), alors le plus grand id c'est le plus récent oui , je crois que ce principe est plus simple que faire un filtrage sur le datetime et le comparer avec le temps reel.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 53
    Par défaut
    Oui en effet, le coup de l'id je n' y avais même pas pensé... mais oui c'est tout aussi logique :-)

    Par contre, je ne vois pas comment je peux rajouter un MAX(n.id) :-(

    Je vais retenter Google... :-)

  6. #6
    Membre éclairé Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 321
    Par défaut
    Salut,

    Lorsque tu récupères un pays via ta requête, tu récupères aussi les objets qui lui sont associés (si on en croit tes relations): PaysNom, PaysInitiale etc... via les attributs $PaysNoms, $PaysInitiales. Ensuite tu récupères simplement l'id de ton objet associés via un getid()...

    Par ailleurs, un MAX(n.id) par exemple est tout à fait possible via la classe expr, regarde la doc de doctrine

    Par contre, je ne comprends pas tes relations. Un pays a vraiment plusieurs initiales et plusieurs noms ?

Discussions similaires

  1. [A-03] Joindre 2 requêtes
    Par helprojet dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/02/2009, 22h19
  2. Comment passer trois requêtes à la fois ?
    Par genio dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/08/2008, 15h00
  3. Trois requêtes en une seule
    Par korg-pa80 dans le forum Langage
    Réponses: 5
    Dernier message: 23/06/2008, 11h26
  4. [MySQL] trois requêtes identiques avec différents résultats
    Par xenos dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/04/2007, 14h23
  5. Joindre 2 requêtes
    Par nellynew dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/09/2006, 16h04

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