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

PHP & Base de données Discussion :

Générateur de requete sql à partir de models [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut Générateur de requete sql à partir de models
    Bonjour à tous!

    Je développe des gros projet web, beaucoup de page, beaucoup de requête!
    J'utilise bien sur le model MVC, mais parmi ces trois lettres, l'une me dérange! le MODEL!

    Dans mes models, chaque table de ma bd est représenter par une class. Dans chaque class je peut accéder à d'autre class par des getters! Mon problème c'est que chaque fois que je fait un get quelque chose, ce dernier fait une requete pour récupérer les infos!

    Par exemple, j'ai un produit à afficher:
    - Je récupère mon produit --> une requete
    - Je fait $produit->getDescription($langue) --> une requete
    - J'ai donc un Id de traduction de description, et donc une dernière requête à faire $traduction->getText() qui me renvoi enfin la description qu'il me faut dans la langue que je veut!

    J'aimerais savoir s'il existe des techniques de conception de model qui permette de récupérer toute les infos avec une seul requête en passant par les getters.

    Exemple:
    Je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $produit->getDescription($langue)->getText()
    Sa me génère UNE seul requete avec des inner join qui me renvoi sous une forme ou une autre mes différents objet imbriqué l'un dans l'autre.

    Quelqu'un connait-il un outil de ce type? Merci.
    /***********************
    Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs et soumis au copyright. Toutes copies sera sévèrement désapprouvé.
    ************************/

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Très bonne question, ça mérite +1.

    En effet il existe plusieurs design patterns qui répondent à cette problématique, je ne les connais pas tous mais je vais essayer de répondre:

    - Active Record, qui lie tes objets PHP à un média (en l'occurence un tuple d'une table) et fournit les getters setters avec écriture et rafraichissement à chaque modification: http://www.martinfowler.com/eaaCatal...iveRecord.html
    C'est un design pattern lourd et coûteux en temps d'éxecution et en charge.

    - Lazy Loading, qui ne va chercher les données sur le média qu'en dernier recours, mets toutes les modifications en cache et ne réplique sur le média que lors que c'est nécéssaire: http://martinfowler.com/eaaCatalog/lazyLoad.html

    - Adapter, qui est prévu pour faire correspondre une interface à une autre, mieux connu sous le nom de wrapper, en PHP il existe des techniques (détaillées dans les tutos de developpez.com) pour faire des fread fwrite directement sur la base de donnée: http://en.wikipedia.org/wiki/Adapter_pattern

    - Decorator, qui permet de donner plus de responsabilité à une classe de base, que tu pourrais appliquer à PDOStatement par exemple pour la lecture et l'écriture sur une table: http://en.wikipedia.org/wiki/Decorator_pattern

    Personnellement j'utilise un adapter pour mes classes modèle: chaque classe possèdent 5 instances internes responsables de la lecture et de l'écriture. Le point d'orgue du design pattern, c'est que ta classe modèle ne connait même pas le média sur lequel elle écrit, ce sont les adaptateur qui s'en chargent.

    ---------

    Il existe également ce qu'on appelle des ORM (Objet Relationnal Mapper) qui sont des libraries toutes faites permettant de mapper une structure de base de données relationnelle sur un modèle Objet: http://en.wikipedia.org/wiki/Object-relational_mapping

    Pour PHP on citera Doctrine et Propel, qui sont tout deux utilisé par le célèbre Symphony, tu trouvera toute la doc qu'il te faut sur leurs sites respectifs.

  3. #3
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    Merci beaucoup!

    Il me semble que doctrine correspond parfaitement à se que je recherche!
    Je vais approfondir le sujet!!

    Merci beaucoup.
    /***********************
    Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs et soumis au copyright. Toutes copies sera sévèrement désapprouvé.
    ************************/

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

Discussions similaires

  1. Generation des requetes sql à partir de MS Sql server
    Par king_soft dans le forum Administration
    Réponses: 1
    Dernier message: 01/06/2010, 21h16
  2. Réponses: 3
    Dernier message: 21/01/2010, 15h45
  3. Réponses: 1
    Dernier message: 06/08/2007, 10h39
  4. Réponses: 5
    Dernier message: 03/04/2007, 09h33

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