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

Zend_Db PHP Discussion :

Comment s'utilise l'ORM avec ce framework ?


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut Comment s'utilise l'ORM avec ce framework ?
    Bonjour,

    J'ai passé un peu de temps à regarder la doc du framework à propos de la partie base de données, donc Zend_Db et les classes qui tournent autour, et j'ai été un peu dérouté par rapport à ce que je connaissais.
    J'ai lu il y a quelques temps que ce framework permettait de faire de l'ORM, mais je n'ai pas retrouvé mes petits. Pour moi l'ORM c'est mapper une classe avec une table. Et le framework gère ensuite tout seul les opérations sur les objets.

    Par exemple, on crée un objet de type Client avec des attributs qu'on renseigne, et ensuite, reste à appeler la bonne méthode pour le créer.
    Par exemple create($client). Cette méthode étant appelée sur une classe utilitaire qui hérite d'une classe générique du framework (ma référence est hibernate).
    Pour info je suis habitué à ce qu'un objet avant d'être persisté ait comme clé primaire la valeur "null", et après avoir été persisté il s'en voit attribuer une par le framework, celle utilisée par le sgbd.

    Ensuite si on veut modifier notre objet on le fait sans s'occuper de la base et si on veut le faire persister on utilise la méthode update sur la même classe utilitaire que pour la création.

    En regardant la doc je n'ai pas trouvé d'exemple ou on manipule des objets métier. Bref je n'ai pas trouvé la notion de mapping.

    Est-ce que j'ai loupé quelque chose dans ce que propose le framework ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Par défaut
    Bonjour,

    Tu peux regarder du coté de Zend_Db_Table, c'est le point de départ des fonctionnalités d'ORM dans le Zend Framework.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    Tu penses bien que j'ai deja regardé la doc du framework à ce sujet.
    Ce que je me demande, c'est comment distinguer la couche métier de la couche d'accés aux données.
    Je n'ai pas l'impression qu'on ait besoin d'objets métiers pour faire de l'ORM avec le framework, ce qui est un peu paradoxal selon moi. Ou alors, si on fait des objets métier, on n'a pas besoin d'une couche DAO.

    C'est pour ça que je voulais avoir des avis de gens qui utilisent Zend Framework pour une appli deja conséquente, et qu'ils me disent comment sont organisées ces deux couches.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 13
    Par défaut
    Jette un œil à :

    http://www.developpez.net/forums/sho...d.php?t=426354

    La partie intéressante est en page 2.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    Merci pour le lien. J'avais déjà lu cette discussion, mais elle ne répond pas à mon problème.
    Pour ma part, je suis convaincu par l'usage du pattern facade. Clairement c'est vraiment se simplifier la vie que de l'utiliser.

    Mon "problème" se situe plus au niveau implémentation de l'ORM.

    Pour l'instant j'ai cette arborescence :


    En admettant que Inscrit.php soir cette classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    	class Inscrit {
    		private $pseudo = '';
    		private $password = '';
    		private $email = '';
    	}
    ?>
    A quel endroit je peux mettre le code qui me permettra via l'appel à des méthodes de la classe IService de créer, mettre à jour, supprimer et sélectionner des objets de type Inscrit ?
    Et aussi, quel est la façon de procéder avec ce que Zend propose ?

    Ce que j'ai vu pour l'instant, c'est de faire par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    	class Inscrit extends Zend_Db_Table_Abstract {
    		private $pseudo = '';
    		private $password = '';
    		private $email = '';
    	}
    ?>
    Et ensuite, dans le controlleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $data = array(
    'PSEUDO' => 'jean_test',
    'PASS' => 'pass_test',
    'EMAIL' => 'monadresse@free.fr_test',
    );
    $newInscrit = new Inscrit();
    $newInscrit->insert($data);
    Ce qui me semblerait plus naturel, serait de créer un objet de type Inscrit, de lui attribuer des valeurs pour chaque attribut, et enfin de le faire persister.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $alphonse = new Inscrit();
    $alphonse->setPseudo('georgio');
    $alphonse->setEmail('geaorgio@developpez.com');
    $alphonse->setPassword('azerty');
    $this->service->createInscrit($alphonse); // à ce moment en suppose que le sgbd attribue la valeur 7 (par exemple) comme id à l'enregistrement
    Par la suite, je peux récupérer mon objet de type Inscrit en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $alphonse = $this->service->getInscritById(7);
    $alphonse->setEmail('unAutreEmail@developpez.com');
    $this->service->updateInscrit($alphonse);
    Le framework est-il prévu pour ce genre de chose ? Et si oui, comment organiser ce qui est derrière le service ? Des exemples seraient bien venus

  6. #6
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    j'ai écrit ceci si ça peu aider
    http://zend-framework.developpez.com...in/blog/zf/db/

    A+JYT

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

Discussions similaires

  1. [.NET] utiliser ADO.NET avec le framework 4
    Par TheBlackReverand dans le forum SQLite
    Réponses: 0
    Dernier message: 23/06/2010, 19h40
  2. Comment créer/utiliser master page avec JSP
    Par Javix dans le forum Struts 1
    Réponses: 5
    Dernier message: 15/06/2010, 20h46
  3. comment on utilise les thread avec pygtk ?
    Par dkmatt dans le forum GTK+ avec Python
    Réponses: 8
    Dernier message: 03/11/2009, 15h42
  4. Réponses: 3
    Dernier message: 12/10/2009, 15h33
  5. [Session] Utilisation des sessions avec le framework
    Par kalidjinn dans le forum Autres composants
    Réponses: 5
    Dernier message: 23/03/2007, 22h10

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