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 des données de tables liées [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut Récupérer des données de tables liées
    Bonjour,
    J'ai une table "Formation" qui est en relation N:1 avec une autre table "Diplome". Cela veut dire qu'un diplome a plusieurs formations. Malheureusement, chacune des tables a un champ "nom". Or ma volonté est de récupérer les formations et les catégoriser par diplome. Donc quand j'ai fait la sélection sur la table formation avec un leftJoin vers les diplome, je ne sais plus comment faire ma catégorisation. En effet, si je fait $formation->getNom(), il ne peut retourné que le champ nom de la table formation et je ne sais pas comment récupérer le champ nom de la table diplome. Au fait, j'aimerais toute idée pour réussir ma catégorisation. Merci.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Comme réponse incomplète, pour récupérer les noms de tes diplômes à partir de tes formations, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $diplome_name = $formation->getDiplome()->getName();
    où getDiplome fait référence à ton nom de relation (si tu l'as bien spécifié) entre Formation et Diplome.

  3. #3
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    [snip collision de réponses ^^]

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut
    Ca a marché 5/5. Thanks

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Bien

    Ne pas oublier de marquer Résolu !


    @Herode : Désolé, j'espère que le choc n'a pas été trop violent !

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Juste un bémol.

    La méthode indiqué fonctionne parfaitement et est celle à utiliser, mais...

    Imaginons le code suivant, rassemblé en un seul, mais qui devrait être réparti suivant le modèle MVC, ici, ce sera plus simple pour comprendre mes propos.

    J'ai donc les tables client -> facture -> ligne -> produit, schéma simple et qui ne nécessite pas d'explications particulières. Je veux créer un rapport avec une série de facture, le nom du client, le nom des produits achetés sur la facture.

    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 les factures par facilité on dit que l'on en récupère 10.
    $q = Doctrine_Querry::create()
              ->from('facture f')
              ->where('f.date betwen ? and ?', array($dateDab, $dateFin) );
    $factures = $q->execute()
    // on boucle pour afficher les données
    foreache ($factures as $facture)
    {
       echo $facture->getNum();
       echo $facture->getDate();
       echo $facture->getClient()->getNom(); // on retrouve le nom du client
     
       // et on va chercher les lignes de la facture on dit 10 lignes par factures
       foreach ($facture->getLignes() as $ligne )
       {
          echo $ligne->getQte();
          echo $ligne->getProduit()->getNom();
       }
    }
       }
    Nonobstant les problèmes certains de mise en page hors de propos. Nous avons les informations recherchées à l'écran.

    Et nous avons le plaisir d'avoir envoyé 121 requêtes à notre base de données. En effet, 1 pour les 10 factures, une pour le nom des clients mais 10 fois, une pour la liste des 10 produits, mais 10 fois, une pour le nom des produits 10 fois par factures soit 100...

    C'est le danger des ORM qui font oublier qu'il y a du sql derrière...

    Les premières lignes réécrites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // On récupère les factures par facilité on dit que l'on en récupère 10.
    $q = Doctrine_Querry::create()
              ->from('facture f')
              ->leftjoin('f.client c')
              ->leftjoin('f.lignes l')
              ->leftjoin('l.produit p')
              ->where('f.date betwen ? and ?', array($dateDab, $dateFin) );
    $factures = $q->execute()
    // on boucle pour afficher les données
    Le reste du code ne change pas et nous n'avons plus qu'une requête.

    Pour le reste, nous sommes d'accord.

    Pensez, régulièrement, à consulter, en mode débug sous symfony, dans la barre de debug, le compteur du nombre de requêtes nécessaires pour afficher votre page, il peut expliquer certains ralentissement (ou un ralentissement certain !)

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

Discussions similaires

  1. Récupérer des données d'une table "étrangère"
    Par surf-max dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/06/2010, 10h25
  2. Récupérer des données de 2 tables
    Par Carmiel dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/05/2009, 07h46
  3. [MySQL] récupérer des données depuis une table mysql
    Par godbless dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/10/2008, 13h04
  4. Comment récupérer des données, les comparer à une autre table.
    Par soria_t dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/08/2008, 17h58
  5. Récupérer des données sur 3 tables..
    Par sanaell dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 09/05/2007, 20h03

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