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 :

Requête Objets en relations


Sujet :

Doctrine2 PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Requête Objets en relations
    Bonjour,

    j'ai une requête assez complexe ( pour moi ) à effectuer et je ne m'en sort pas après de multiples essais.

    J'expose le problème :

    J'ai une entité User possédant une liaison ManyToMany réfléctive sur elle même.
    Un User à donc un attribut $myFriends qui est une ArrayCollection de User.

    J'ai également une entité Rencontre qui possède un attribut $idCapitaine, qui est le id de l'objet User qui à créé cette rencontre. Ce n'est pas une relation entre Rencontre et User. C'est moi qui dans le constructeur de Rencontre rempli cette attribut $idCapitaine.

    J'ai un User A connecté à mon site, je voudrais que mon site affiche l'ensemble des objets rencontres créé par un ami de mon User A connecté.

    j'avais fait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $query = $em->createQuery('SELECT r FROM Rencontre r WHERE r.idCapitaine MEMBER OF (SELECT friend_user_id FROM friends WHERE user_id = :id)');
    	$query->setParameters('id', $id );
    Mais ce n'est pas la bonne façon de faire puisque je vais questionner les tables relationnel créé par doctrine au lieu de manipuler les objets. ( de toute facon ça ne fonctionne pas).

    Voila si quelqu'un avait une piste ce serait sympatoche

    Merci

    PS: Si votre solution nécessite que je crée une relation ManyToOne entre Rencontre et User, pour que Rencontre possède un attribut $Capitaine étant un User, cela me convient aussi ! je ne suis pas bloqué sur ma méthode.

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    PS: Si votre solution nécessite que je crée une relation ManyToOne entre Rencontre et User, pour que Rencontre possède un attribut $Capitaine étant un User, cela me convient aussi ! je ne suis pas bloqué sur ma méthode.
    oui c'est ça qu'il faut faire.

    user has many friends(entité User)
    Rencontre has one capitaine(entité User)
    Rencontre has many participants (entité User)

    éventuellement User has many rencontres (entité Rencontre)

    et je pense que la requete suivante ferait l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT r 
    FROM MyBundle:Rencontre r 
    INNER JOIN r.capitaine c 
    INNER JOIN c.friends f 
    WHERE  f.id=:idUtilisateurConnecte
    Dans ta requete à quoi correspond friends? il faut que ce soit une entité pour faire une requete DQL dessus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT r FROM Rencontre r 
    WHERE r.idCapitaine 
    MEMBER OF (
         SELECT friend_user_id 
         FROM friends 
         WHERE user_id = :id)

  3. #3
    Expert éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est un ORM donc pas besoin de faire de jointure ni rien si ton mappage est correct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rencontre = $em->getRepository('User')->find($idami)->getRencontres();

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci bien, je switch sur résolu.

    Finalement j'ai récupéré les id des ami de mon User dans le controller sous forme de liste avec un foreach. J'ai passé la liste en paramètre de ma fonction perso recupérerRencontre($listeIDami) dans mon repository et de là j'ai pu créer la requête que je souhaitais, car j'avais d'autre conditions à ajouter.

    Bonne soirée !

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

Discussions similaires

  1. Héritage d'objet avec relation
    Par Fused dans le forum ORM
    Réponses: 7
    Dernier message: 25/01/2011, 10h20
  2. Réponses: 0
    Dernier message: 17/08/2010, 17h23
  3. Requête sur tables relation n,m
    Par babali33 dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/04/2009, 12h20
  4. Problème de requête pour une relation de type n-n
    Par toutoune60 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/03/2007, 15h41
  5. [HTTP]Créer une requête http multipart/related
    Par jothi35 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/04/2005, 15h32

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