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

Langage PHP Discussion :

[POO] Problème de conception POO et requêtes sql


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut [POO] Problème de conception POO et requêtes sql
    Bonjour,
    En fait j'ai un petit problème au niveau de la conceptualisation de mes classes

    Donc au niveau conceptuel j’ai par exemple 2 tables :

    La table activitée (id, lib adr, lieu, id_dept)
    Et la table departement (id_dept, cd_dept, lib_dept)

    Relationnellement parlant : une activité concerne un département.


    Niveau programmation j’ai une classe qui interagit avec la bdd mysql (dans ce cas présent) avec connection à la base et exécution de toutes les requete sql.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Class mysql{
        
        Constructeur(){
        }
    
        function selection_mysql(table_en_paramètre, tableau_ de_champs_de_la_table, Identifiant_ciblé){
        //Construction de la requête et retour du résultat  dans un tableau associatif
        }
    }

    La classe departement qui hérite donc de la classe mysql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Class departement extends mysql{
        
        Constructeur(){
        }
    
        function selection_departement(identifiant_ciblé){
            if ($this->selection_mysql(nom_de_la_table, champ_de_la_table, id_de_l_enregistrement))
            //Construction de la requête et sauvegarde du résultat dans un tableau associatif
        }
    }
    Et enfin la classe Activité qui hérite également de la classe mysql

    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
    Class activitee extends mysql{
        
        Constructeur(){
        }
    
        function selection_activitee(identifiant_ciblé){
            if ($this->selection_mysql(nom_de_la_table, champ_de_la_table, id_de_l_enregistrement))
             //Construction de la requête et sauvegarde du résultat dans un tableau associatif :   “ select * from activite where id_activite= « $id_activite » “
    
        //A partir de l’id département de la table activitée récupérer les codes et libellées correspondant dans la table département    “ select * from department where id_depart=« $id_departement (récupéré du résultat de la première requete)  » “ 
        $this->departement = new departement();
        $this->departement->selection_departement($this->tableau_activite[$this->champs[“id_dept”]]);
                        $this->tableau_activite[$this->champs[“id_dept”]]=$this->departement;
        }
    }

    Au final je fais 2 requetes pour construire mon tableau activitée avec les attributs du département correspondant.
    “ select * from activite where id_activite= « $id_activite » “
    “ select * from department where id_depart=« $id_departement (récupéré du résultat de la première requete) » “


    J’aimerais organiser me classes d'une manière et optimale de sorte de pouvoir effectuer une seule requete avec jointure
    “ select * from activite, departement where activite.id_dept=department.id_dept and id_activite= « $id » “

    Je pensais rajouter une function jointure dans ma classe mysql mais ca devient trop bordélique à gérer.

    Je me demandais si vous auriez pas une idée de conception et structuration de classe de sorte de pouvoir utiliser une seule reuquete avec jointure plutot que plusieurs simples?

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    Pourquoi autant d'héritages ?
    Le but de la classe d'accès à la BDD, c'est d'être une couche intermédiaire entre la base et ton appli. Tes objets n'ont pas à en hériter. Ils doivent plutôt lui communiquer les requêtes à éxécuter et récupérer le résultat, sous forme de tableau la plupart du temps.

    Au niveau architecture, j'opterais pour une classe Départements qui contient un tableau d'objets Activité. Nous retrouvons ainsi ta structure voulue avec un département qui contient plusieurs activités. Tu peux ensuite faire un tableau général constitués d'objets Départements.
    Une fois que cette grosse classe métier est chargée, tu n'as plus qu'à la triturer selon tes besoins.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Oui merci, tu as raison en ce qui concerne l'héritage de la classe MYSQL, c'est vrai que c'est complétement inutile.

    Par contre au niveau architecture la classe activité sera amené à recueillir les clées étrangère de plusieurs tables (départements, secteurs, sous-activitée, ect...).

    Ce que tu dis c'est de partir de département et remonter sur activitée. Tout cela géré dans une nouvelle classe de gestion? Peux tu me montrer rapidement une structure du code et les étapes de construction de la requete stp?


    Je ne sais pas si la vision une table=une classe est bonne?

    Sinon je pensais exporter la création de la classe département de la classe activite (qui ne contiendrait plus un objet departement) dans le fichier principal mais je crois que cette solution n'est pas logique vu que departement dépend seulement des activites.

    En fait j'essaye de trouver une structure optimale pour gérer mes classes et l'interaction avec la bdd


    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
    22
    23
    24
    $mysql=new mysql();
    $activite=new activite();
    $departement=new departement();
     
    $mysql->selection_mysql($activite->nom table, $activite->tous les champs de la table, [$id de l activite souhaite])
     
    /*A ce moment ma requete est a ce niveau
       Dans la classe activitee 
     
       $mysql->select=" * ";
       $mysql->from="from table activitee"
       $mysql->where=""; */
     
      $mysql->jointure_mysql($activite->nom table, $activite->champs id        departement, $departement->nom table, $departement->champs id departement , [$id du  departement souhaité])
     
    /*lorsque la jointure est demandée avec la classe département ma requete évolue
      $mysql->from.=", departement";
      $mysql->where.=" where activitee.id_dept=departement.id_dept";*/
     
    //Ensuite exécution de la requete 
      $mysql->exécution_requete();
     
    //Affichage du résultat 
      $mysql->result["id_activitee"];

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par redsaint0
    Je ne sais pas si la vision une table=une classe est bonne?
    J'aime bien aussi cette vision, qui peut ensuite être complétée par des classes métier.

    Par contre pour le reste, j'ai dû faire une inversion...

    Il y a un département pour plusieurs activités ou le contraire ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Non non il y a bien :
    - plusieurs activitées pour un département
    - et un département pour une activitée

Discussions similaires

  1. Problème avec like dans une requête SQL
    Par Boublou dans le forum SQL
    Réponses: 2
    Dernier message: 16/08/2007, 15h46
  2. Problème de SUM sur une requête SQL
    Par Lapicure dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/06/2007, 11h51
  3. [SQL] Problème de majuscule dans ma requête SQL
    Par nicolas2603 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/04/2007, 14h25
  4. [POO] Logique de conception POO
    Par nicocolt dans le forum Langage
    Réponses: 11
    Dernier message: 18/04/2007, 17h06
  5. problème d'exécution d'un requête SQL!
    Par binhjuventus dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/07/2006, 04h21

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