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 :

[Symfony2] Jointure double niveau


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 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 25
    Par défaut [Symfony2] Jointure double niveau
    Bonjour, je possède un formulaire de recherche permettant de trouver des artisans en fonction d'une catégorie.
    Voici mes Entitées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    class User extends BaseUser
    {
     
       ...    
     
        /**
         * @ORM\OneToOne(targetEntity="Btp\UserProBundle\Entity\UserPro", cascade={"remove", "persist"})
         */
        protected $user_pro;
     
       ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    class UserPro
    {
       ...
     
        /**
         * @ORM\ManyToOne(targetEntity="Btp\UserProBundle\Entity\Categories")
         */
        protected $categorie_1;
     
       ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    class Categories
    {
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
       ...
    J'ai donc un UserRepository contenant une methode findUserProByCategorie, qui en fonction de la catégorie choisie, retourne la liste des UserPro possédant cette catégorie.

    J'aimerais exécuter l’équivalent DQL de cette requette SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from User
    inner join UserPro on User.user_pro_id = UserPro.id
    inner join Categories on UserPro.categorie_1_id = Categories.id
    where Categories.id=XXXX
    J'ai l'impression qu'il faut que j'utilise une relation bidirectionnel, mais c'est un peu flou.

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,

    l'équivalent dql serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT u, up, c
    FROM User u 
    INNER JOIN u.user_pro up
    INNER JOIN up.categorie_1 c
    where c.id=XXXX
    pas besoin de relation bidirectionelle (c-a-d un attribut userPro dans catégorie), les collections de userPro dans catégories serait sans doute trop grande et inutilisable.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 26
    Par défaut
    Je ne peut pas m'empecher de voire quelque chose dans tes entités. Tu nomme un attribut "categorie_1"

    Cela implique t'il que tu puisse avoir plusieurs catégories par user?

    Ensuite, je ne comprends pas bien à quoi sert UserPro. Je t'avoue que ce serait plus simple à comprendre si tu nous donnait tout le code et une petite explication supplémentaire sur ce que tu as voulu faire, car à premiere vue, j'ai de la peine à voire si tes entités sont bien pensées ou non.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    t'as pas a faire de jointure avec l'ORM

    donc si ton mapping est bien fait c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $category->getUserPros();

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 25
    Par défaut
    Merci pour les réponses.

    J'avais finalement trouvé l'équivalent en DQL

    Le $category->getUserPros(); n'est pas possible car il me faut récupérer les User et non les UserPro correspondant à une catégorie.

    Enfin bon, je vais faire çà en DQL, merci

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par j.boe Voir le message
    Le $category->getUserPros(); n'est pas possible car il me faut récupérer les User et non les UserPro correspondant à une catégorie.

    juste $category->getUsers() alors, tout est déjà incluse dans l'ORM, si tu l’utilises pas fait juste du PDO ...

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

Discussions similaires

  1. Jointure double sur une table + cas ou pas de jointure.
    Par asouquieres dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/08/2010, 09h16
  2. [VxiR2] jointure double (AND)
    Par tpeluchon dans le forum Designer
    Réponses: 5
    Dernier message: 20/10/2009, 22h38
  3. Jointure, Double Jointure Quand tu nous tiens
    Par petchos dans le forum Langage SQL
    Réponses: 23
    Dernier message: 15/05/2008, 13h07
  4. Jointures au Niveau d'Oracle
    Par PiliSql dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/02/2008, 19h50
  5. [stratégie] double niveau de template ?
    Par BainE dans le forum Langage
    Réponses: 6
    Dernier message: 26/04/2005, 13h01

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