Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2011, 22h19   #1
Membre actif
 
Avatar de Snooky68
 
Homme Nicolas TSCHAENN
Développeur Web/Python/PHP
Inscription : mai 2006
Messages : 244
Détails du profil
Informations personnelles :
Nom : Homme Nicolas TSCHAENN
Âge : 25
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : mai 2006
Messages : 244
Points : 163
Points : 163
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 :
$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.
__________________
About.me
/***********************
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é.
************************/
Snooky68 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/01/2011, 00h01   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/01/2011, 11h38   #3
Membre actif
 
Avatar de Snooky68
 
Homme Nicolas TSCHAENN
Développeur Web/Python/PHP
Inscription : mai 2006
Messages : 244
Détails du profil
Informations personnelles :
Nom : Homme Nicolas TSCHAENN
Âge : 25
Localisation : France, Bas Rhin (Alsace)

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

Informations forums :
Inscription : mai 2006
Messages : 244
Points : 163
Points : 163
Merci beaucoup!

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

Merci beaucoup.
__________________
About.me
/***********************
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é.
************************/
Snooky68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h32.


 
 
 
 
Partenaires

Hébergement Web