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 :

conception Objet avec plusieurs table MYSQL


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Points : 21
    Points
    21
    Par défaut conception Objet avec plusieurs table MYSQL
    Bonjour !

    j'arrive à récupérer les informations d'une table MYSQL depuis une class.

    exemple:

    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
    25
    26
    27
    28
    29
    class User {
     
          private $firstname;
          private $lastname;
          private $connection;
     
     
          public function __construct($firstname,$lastname)
          {
                $this->firstname = $firstname;
                $this->lastname = $lastname;
                $this->connection = SPDO::getInstance();
           }
     
     
           //les getter et les setters
     
           public function getUser($id)
           {
                $request = "SELECT * FROM user WHERE id_user=$id";
     
                return $this->connection->queryFetchObj($request);
            }
     
            // ensuite les methode save, update etc application CRUD
            // je passe les details
     
     
    }
    voila bon mais ça c'est pour une class et une table

    maintenant imaginons que j'ai plusieurs table et qui comprends la class user !
    avec par exemple des relations n:n

    je dois sélectionner la table utilisateur et la table ville, code Postal etc et une table qui contiens ses message par exemple !

    ma difficulté c'est de récuprérer les données de plusieurs table avec plusieur tuples !
    bien sur je précise je sais faire des requetes multi jointures.

    je penses que je dois faire dans la collections d'objets mais je ne vois pas
    trop comment faire niveau conception de la chose !

    Si quelqu'un pouvais me filer un coup de main ça serais sympa !


    Merci d'avance !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    Citation Envoyé par Polymorph Voir le message
    ma difficulté c'est de récuprérer les données de plusieurs table avec plusieur tuples !
    bien sur je précise je sais faire des requetes multi jointures.

    je penses que je dois faire dans la collections d'objets mais je ne vois pas
    trop comment faire niveau conception de la chose !
    pourquoi ne pas passer la requête quelconque en paramètre ?

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function getQuery($query)
    {
      // instruction...
    }
     
    

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci pour ta réponse !

    Alors en faite j'y avais pensé mais je ne sais pas si d'un point de vu conception c'était peut être pas top !

    car il ressort souvent qu'il faut faire une classe par table !
    alors je me suis mis ça dans la tête depuis !
    parce que je voudrais pas mélanger les messages et l'utilisateur par exemple

    j'avais pensé au début a faire une classe user qui possèdes ces propre requêtes CRUD et je voulais pas faire de méthode qui retourne tous les utilisateurs car ce n'est pas son rôle à mon avis...

    une class message et une classe qui gère les 2 mais la je prends la tête je penses !

    peut tu me donner ton avis, un model de conception que tu ferais pour ça stp?

    parce qu'avec les bases de donnée l'objet, les sessions à faire communique je m'y perd un peu ! lol mais c'est intéressant !

    pour moi c'est un bon exercice qui me permettrais de plus d'utiliser les interfaces, et iterator que j'aimerais bien assimilé !

    merci pour ton aide !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    je sais pas mais ce qu'est marrant avec les fonctions c'est que tu peux faire un peux ce que tu veux, si tu veux récupérer par exemple le nom du client seulement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function getQuery($query,$fieldname)
    {
      // $query ==> SELECT name FROM table_clients WHERE f_id='1'
        $query = mysql_query($query)...
        if (mysql_num_rows($query)) {
          $row=mysql_fetch_assoc($query);
           $result=$row[$fieldname];
           # Libère la mémoire allouée
           mysql_free_result($query);
         }
      return $result;
    }
    // retourne un résultat

    ou récupérer une liste des id clients ou autre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function getQuery($query,$fieldname)
    {
      // $query ==> SELECT id FROM table_clients
         $query = mysql_query($query)...
         while ($row=mysql_fetch_array($query_msh))
         {
           $result[] = $row[$fieldname];
         }
         mysql_free_result($query);
     
      result $result;
    }
    // => retourne un tableau
    ou récupérer une liste des id et construre un tableau html...

    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
    25
    26
    27
     
    function getTableauHTML($values)
    { // $values ==> tableau
      $rc="\n";
      $result = '<table border="1">'.$rc;
      foreach ($values as $value) {
        $result .= ' <tr>'.$rc.
                   '  <td>'.$value.'</td>'.$rc.
                   ' </tr>'.$rc;
      }
      $result .= '<table>'.$rc;
      return $result;
    }
     
    function getQuery($query, $fieldname, $html = true)
    {
      // $query ==> SELECT id FROM table_clients
         $query = mysql_query($query)...
         while ($row=mysql_fetch_array($query_msh))
         {
           $result[] = $row[$fieldname];
         }
         mysql_free_result($query);
     
      if ($html) return $this->getTableauHTML($result)
      else return $result;
    }
    bon courage

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    merci !

    en faite ce n'est pas trop les fonctions qui me posais problème ça je les maitrise bien ! et les requêtes aussi..

    c'étais plus niveau conceptuel ! de façon à ce que mon code soit le plus réutilisable possible !

    pour éviter le couplage au maximum !
    j'aurais voulu un petit exemple même en français du model !

    genre tu fais une class User une autre gestion User par exemple

    parce que pour moi c'est pas la class User qui dois retourner un liste d'user !
    mais dans ce cas la quel ? faut t'il séparer les requêtes de class user et les mettre dans MYSQLUser par exemple ?

    de plus j'utilise PDO pour les requête et j'en récupère l'instance grâce au pattern Singleton !

    c'est plus des conseilles de conception !

    car je risque de faire évoluer le code par la suite et je voudrais rencontrer le moins de problème possible !

    merci pour ta patience

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    désolé g un peu du mal suivre ou c'est que je ne peu t'aider... mais perso je ne vois l'intérêt de surcharger ton application avec une class supplémentaire (user), j'irai plutôt faire une classe permettant de gérer l'ensemble des données (client/fournisseur/devis...) selon l'utilsation, voir même une classe réutilsable pour d'autres applications ultérieurs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class _DATABASE {
      function getSource($query) {
      }
      ...
    }
    salutations

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    merci en tous cas de chercher à m'aider ! c'est cool !

    l'intérêt et le couplage ! ce que je cherche à faire ce rapproche plus de l'orm !

    mapping d'objet relationnel ! d'après ce que j'ai pu lire d'un bon en la matière Martin Flower mais c'est en anglais il faudrais limite créer une class par table et communiquer de façon objet !

    http://martinfowler.com/

    bref moi j'ai pas encore un bon niveau mais j'essaie des maintenant
    de prendre de bonne habitude et de pouvoir faire du refactoring et réutilisé mon code sans me prendre trop la tête !

    j'avais fais ça en cours en java mais s'etait que pour une table et en JAVA
    et déjà on utilisé le singleton, factory les interfaces !
    je sais que mon prof insistais sur le couplage mais bon j'ai pas pu passé assez de temps pour tous comprendre !

    en tous cas merci !

    si quelqu'un à des infos , des conseilles je suis preneur !

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/07/2009, 22h18
  2. Requête : Insert avec plusieurs tables
    Par bleu_ciel dans le forum Access
    Réponses: 4
    Dernier message: 01/06/2006, 21h42
  3. [VB 2005]Dataset avec plusieurs tables
    Par estelledany dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/05/2006, 14h25
  4. [MySQL] requete avec liaisons avec plusieurs tables
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/03/2006, 22h21
  5. historique avec plusieurs table
    Par Cybher dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/08/2005, 16h38

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