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 :

[DQL]Jointure avec n conditions sur un WITH


Sujet :

Doctrine2 PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut [DQL]Jointure avec n conditions sur un WITH
    Bonjour,

    Je prépare ma première requête en DQL, j'aimerais faire une requête bien spécifique dans un repository, et pour cela je dois appliquer 2 conditions à ma jointure.

    Admettons le schéma suivant:
    3 tables:
    • Membre
    • Adresse
    • Animal


    Voici les relations:
    • Adresse <- ManytoOne -> Membre
    • Animal <- ManyToOne -> Membre


    Le but:
    Récupérer les infos de l'adresse des membres, des membre eux même et de leur animal remplissant les conditions suivantes
    • Adresse.etage = $etage
    • Adresse.rue = $rue
    • Membre.nom = $nom
    • Membre.prenom = $prenom


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $qb = $this->createQueryBuilder('a')
          ->where('a.rue = :rue')
          ->setParameter('rue', $rue)
          ->andWhere('a.etage = :etage')
          ->setParameter('etage', $etage);
    /*Je voudrais rajouter une condition dans la jointure ci-dessous, admettons 'prenom' */
          $qb->join('a.membre', 'c', 'WITH', 'c.nom = :nom');
          ->setParameter('nom', $nom);
         $qb->join('c.animal', 'd')
          ->addSelect('d.age');
    Merci pour le coup de main !

  2. #2
    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 727
    Points
    10 727
    Par défaut
    le but de l'ORM c'est de pas faire de jointure, d’où sortent les infos ? pourquoi y'a pas un identifiant unique ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    Je ne comprends pas bien tes questions, les infos ? Ce sont 3 tables et les valeurs sont des exemples, quand je dis "$nom" c'est à supposer une variable contenant un nom.

    Identifiant unique ? Qu'est-ce que c'est exactement ?

    Alors selon toi quelle est la meilleure méthode avec Symfony2 pour ce genre de requête ?

    Sortir les 3 tables de leurs repository pour ensuite faire un parsing php pour trouver ce qui le lient ? Faire une requête SQL classique ? Comment faire avec doctrine2 ?

    Merci !

  4. #4
    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 727
    Points
    10 727
    Par défaut
    Tu veux faire un requete avec 4 entrées ($etage, $rue, $nom, $prenom)
    d’où sortent les variables ? un formulaire ?

    Si c'est pour de la recherche tout (ou plusieurs) champs utilises un vrai outils de recherche comme Lucene par exemple

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut
    Mes variables sont reçu précédemment en POST via une requête curl.

    Lucene semble être un outil puissant, c'est carrément un moteur de recherche, je veux juste faire une requête sur une base de donnée MySQL avec 3 jointures et 3 where, n'y a t-il pas plus simple ?

    Merci.

  6. #6
    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 727
    Points
    10 727
    Par défaut
    Ça colle pas

    Si tu pars du principe que t'as les infos exacte ($nom, $prenom ...) autant faire une cherche si une identifiant unique (l'id ou l'email)
    Si tu pars du principe que les infos sont approximative, sois tu fais une reche tout champs, sois tu reduis à a $nom (voire $prenom) et t'envoie la liste des résultats

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 284
    Points : 149
    Points
    149
    Par défaut
    Je pars du principe que mes infos sont exactes, mais j'ai justement besoin de retrouver mon "identifiant unique" à partir de la conjugaison de plusieurs champs tel que $nom et $prenom.

    donc selon toi il faudrait que je m'y prenne en 2 requêtes ? (une pour retrouver mon "identifiant unique", et une pour faire la jointure avec mon identifiant unique).

  8. #8
    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 727
    Points
    10 727
    Par défaut
    non mais si les infos sont exactes ça veux aussi dire que t'as l’identifiant, sinon c'est quelle ne sont pas exacte,
    Si t'es dans un magasin et que tu souhaites retourver la personne, demande son email, ou le nom et le prénom avec une liste et ensuite filtrer la liste

Discussions similaires

  1. Paginate avec des conditions sur les clés etrangères.
    Par CeDRiC08 dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 03/07/2007, 10h49
  2. [XSLT]Trouver un noeud avec une condition sur ses sous-noeuds
    Par enguerran dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/02/2007, 12h00
  3. [Oracle] jointures avec une somme sur deux champs
    Par guggus dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/10/2006, 18h06
  4. Requete avec une condition sur le resultat [10g]
    Par hotkebab99 dans le forum Oracle
    Réponses: 5
    Dernier message: 12/09/2006, 12h33
  5. Jointure avec 2 conditions
    Par portu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/11/2005, 15h57

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