Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-06-2011 15:22:26

xenesis
Membre
Date d'inscription: 25-08-2009
Messages: 23

Doctrine ?

Bonjour,

J'aimerai savoir si - en utilisant doctrine 2.x - je peux générer automatiquement des modèles en fonction des bases de données ? Actuellement j'utilise Zend_Db pour chaque table mais j'avoue que c'est redondant car je dois manuellement créer des méthodes CRUD pour chaque table. Exemple je fais une recherche sur un nom d'utilisateur, je vais devoir faire une methode searchByUserName avec une requete SQL de Zend_Db

Sur Symphony j'avais lu qu'il était possible de faire un mapping objet assez puissant qui permet de faire une requete SQL en tappant les mots clés genre searchByFieldAndField

C'est possible ou doctrine dans mon cas ne servira strictement à rien ?

Merci pour vos réponses

Hors ligne

 

#2 22-06-2011 21:57:39

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: Doctrine ?

Bonjour,

Pour répondre à ta question, surement ! Je te dis surement car moi j'utilise la version 1.2 et je génère automatiquement mes modèles. J'ai pas encore fait le saut vers 2.x car le saut semble assez grand.

Dans doctrine 1.2, c'est la fonction "Doctrine_Core::generateModelsFromDb" qui me permet de faire ça.

Cherche l'équivalent pour 2.x

Hors ligne

 

#3 23-06-2011 17:00:53

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: Doctrine ?

Hors ligne

 

#4 30-06-2011 14:53:34

bgy
Membre
Lieu: Aix en Provence
Date d'inscription: 23-02-2009
Messages: 14
Site web

Re: Doctrine ?

Selon la version que tu utilises de Doctrine 2.0x un outil est mis à disposition en cli.

http://www.doctrine-project.org/docs/or … ngineering

En revanche, comme le mentionne le commentaire sur SO, je te déconseille de le faire, tu dois penser ORM et non pas SGBR, construire tes entités ainsi risque de corrompre l'utilité d'un ORM (qui n'est pas la même qu'un DAL).

D'autant plus que dans le cas de relation complexe, tu n'auras simplement le résultat souhaité car Doctrine 2 s'appuie sur les metadata de ta BDD et non pas sur la logique inhérente à celle-ci.


http://borisguery.com | Fork me on Github | Follow me on Twitter | Check out my tips on Coderwall | More About me

Hors ligne

 

#5 03-07-2011 04:09:28

xenesis
Membre
Date d'inscription: 25-08-2009
Messages: 23

Re: Doctrine ?

Excuses moi bgy mais je n'ai pas bien compris ton post. Doctrine 2.x n'est pas adapté dans mon cas ? C'est ça ?

Hors ligne

 

#6 04-07-2011 15:22:11

bgy
Membre
Lieu: Aix en Provence
Date d'inscription: 23-02-2009
Messages: 14
Site web

Re: Doctrine ?

xenesis a écrit:

Excuses moi bgy mais je n'ai pas bien compris ton post. Doctrine 2.x n'est pas adapté dans mon cas ? C'est ça ?

Oui et non, ce que je voulais surtout dire c'est que quand tu travailles avec un ORM tu dois d'abord penser Object, seulement ensuite tu réfléchis aux optimisations (pour des questions de performances principalement).

Le problème en fonctionnant ainsi est que t'accroches à un modèle relationnel, et ce n'est probablement pas ce que tu cherches si tu veux utiliser un ORM.

Les relations entre objects ne sont pas physiquement ni logiquement les même que dans SGBDR.

ORM = Object Relational Mapping
DAL = Database Abstraction Layer

Si tu veux utiliser un ORM, pense Objet, ça me parait essentiel, j'ai presque envie de dire "oublie ce que tu as appris sur les bases de données" c'est vraiment une façon différent de travailler avec tes models.

Par exemple lorsque tu utilises le DQL (Doctrine Query Language), même si ça ressemble à du SQL, ça n'a rien à voir. Tu t'en rendras compte très vite lorsque tu feras des jointures par exemple.

Tu peux utiliser l'outil de reverse engineering pour avoir une "base" mais je te conseille tout de même de faire ce travail à la main et de laisser Doctrine regénéré ton schema de base de données (ensuite tu pourras alors retravailler schema en fonction de tes problématiques de performances).

J'espère que ça répond à ta question.


http://borisguery.com | Fork me on Github | Follow me on Twitter | Check out my tips on Coderwall | More About me

Hors ligne

 

#7 04-07-2011 18:48:59

xenesis
Membre
Date d'inscription: 25-08-2009
Messages: 23

Re: Doctrine ?

Ce que je souhaitais surtout, c'est ne pas avoir à réécrite un modèle pour gérer le CRUD de chaque table dans la base de données. Exemple :

- Table users, avoir un fichier model qui me permette de faire searchUserById($id), ou searchUserByName
- Table commandes, même chose, getCommandeById($id)

En gros utiliser une appellation magique __getter __setter qui dira a doctrine de prendre tel champs dans telle table sans avoir à refaire la fonction à chaque fois et pour chaque table. J'ai vu que symfony pouvait faire quelque chose de ce type, tout du moins sous propel, avec Doctrine je sais pas.. c'est la première fois que je le manipule..

Hors ligne

 

#8 05-07-2011 23:17:28

bgy
Membre
Lieu: Aix en Provence
Date d'inscription: 23-02-2009
Messages: 14
Site web

Re: Doctrine ?

Tu as des méthodes magiques similaires dans Doctrine 2, cependant étant donné l'utilisation d'un pattern différent, ces méthodes vont se trouver dans les Repositories. Par défault Doctrine 2 te fournit 4 méthodes :

Code:

[lang=php]
find($id);
findAll();
findOneBy(array('status' => 'active'));
findBy(array('status' => 'active'));

Tu peux également utiliser des méthodes magiques du type

Code:

[lang=php]
findOneByStatus('active');

Je t'invite à jeter un oeil à la documentation officiel ainsi qu'à la classe Doctrine\Orm\EntityRepository

Pour les cas plus complexes, tu devras implémenter toi-même de nouvelles méthodes. Rien ne t'empêche également de créer ton propre AbstractRepository que tu étendras pour l'ensemble de ton domaine.


http://borisguery.com | Fork me on Github | Follow me on Twitter | Check out my tips on Coderwall | More About me

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages