Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 11-10-2007 13:16:56

superloulou77
Membre
Date d'inscription: 11-10-2007
Messages: 10

Interet zend_db_table

Quelqu'un px m'expliquer l'interet de zend_db_table voila comment je gere mes model acutuellement et je voudrais comprendre quel interet j'ai à changer.

Voila une methode extrait de ma classe contactModel
je fais des appel via mes controlers
je n'ai que des methodes static
je voudrais savoir si ma methode est "bonne"

exemple d'une fonction insert

Code:

static function req_insert_contact($contact) 
    {
$row = array (    
'contact_nom'      =>    $contact->get('contact_nom'),
'contact_prenom'  => $contact->get('contact_prenom'),
'contact_adresse'  => $contact->get('contact_adresse'),
'contact_tel'         => $contact->get('contact_tel'),
'contact_fax'        => $contact->get('contact_fax'),
'contact_portable'   => $contact->get('contact_portable'),
'contact_mail'  => $contact->get('contact_mail'));
            
    $table = 't_contact';
    $db = Zend_Db::factory($_SESSION['dConfg']['serveur_sql'], $_SESSION['dConfg']['params_sql']);
    $db->insert($table, $row);
    return $db->lastInsertId();    
}

Hors ligne

 

#2 11-10-2007 14:51:38

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Interet zend_db_table

Bonjour,

Ta méthode est parfaitement bonne. Tu peux décider de changer pour ne manipuler que des objets qui vont représenter ta base de données, mais ça n'a rien d'obligatoire.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 11-10-2007 21:35:25

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Interet zend_db_table

j'utilise Zend_Db_Table pour faciliter certaines choses. j'ai beaucoup de table qui ont un structure simple est classique un id auto incrémenté comme clef primaire et d'autre champs
sur celle-ci il y a quelques requêtes qui reviennent de façon récurrente
getElementById qui retourne une ligne en fonction de la clef primaire
insertObject qui insère un objet (un peut comme ton exemple)
updateObjectById (qui met à jour un objet en se basant sur sa clef)
DeleteById qui supprime un élément par sa clef.

J'utilise aussi des classes spécifiques pour les objets que je sort de ma table
les objet sortit de la table client seront des Client de la table facture des factures. du coup mes classe on tout intérêt à être des Zend_Db_Row car ainsi il garde le lient avec leur table à condition qu'il soit associé à une Zend_Db_table

J'écris donc une classe Model_Clent_Table qui dérive de Zend_Db_Table et une Model_Client_Row qui est un client et qui dérive de Zend_Db_Row.

je suis bien avancé car en fait à ce stade je n'ai rien fait. il va me falloir définir sur la classe Model_Client_Table les méthode que j'ai données plus haut
et si j'ai un Model_facture_table je recommencerais.

et c'est là que le modèle objet prends toute sa valeur.
Je me suis fait une classe Model_Table qui dérive de Zend_Db_Table qui contient ses méthodes. il me suffit donc de dériver Model_Clent_Table Et Model_Facture_Table de Model_Table est ces méthodes sont hérité plus besoin de les écrire. elle le sont une fois pour toute.

J'ai dit que Zend_Db_Row garde le lient de sa table d'origine. c'est pratique pour mettre à jour un objet. je demande à ma table un Client je le manipule et ensuite je lui demande la table d'où il vient pour l'enregistrer.

il serait intéressant de pouvoir faire de même avec un nouvel objet. je crée un Client et je lui demande sa table pour l'enregistrer.  mais la classe Model_Client_Row ne connait pas la table car c'est un nouvel objet. la Classe Model_Client_Table elle connait la classe Row qui lui est associé. J'ai donc ajouté à Model_Table la méthode newElement qui me retourne un nouvel objet qui est relier à la table. je n'ai plus qu'a le manipuler pour fait comme pour les mise à jour.

finalement le code pour enregistrer un objet
qui est lié à une table est toujours le même. j'ai donc ajouté une classe Model_Row dont mes Model_Client_row et Model_Facture_Row dérivent. je lui est adjoint la méthode save. qui retrouve la table et invoque un inserObject ou updateObjectById

la boucle est bouclé pour manipuler des Livre je crée la classe Model_Book_Table je lui donne comme paramètre la table book et al rowClass Model_Book_Row sur cette dernière je définis les champs ayant une valeur par défaut (pour la création new) je lui adjoint les méthode métier par exemple critiquer et c'est tout

je fais

Code:

$aBook = $bookTable->getElementById(25)->critiquer('ceci est une critique sévère)->save();

ou

Code:

$aBook = $bookTable->newElement();
$aBook->Author = 'sekaijin';
$aBook->Title = 'Using Zend_Db_Table';
$aBook->save();

si j'ai besoin de rechercher la liste des ouvrage pour un auteur je n'ai pas à chercher où je vais mettre la méthode naturellement je l'ajoute à Model_Book_Table

ainsi mon  code est capitaliser vu que pour chaque table je n'écrit que ce qui la concerne. tout ce qui est commun à toute les tables est dans Model_Table

finalement je n'écris pratiquement pas de requêtes j'utilise les méthodes hérités

mais je suis allé plus loin. je manipule pas mal de table hiérarchique. sur ces dernière j'ai des besoin récurant. ajouter un fils supprimer un nœud trouver le père trouver tous les ascendants trouver tous les fils trouver tous les descendants trouver les ascendants sur x générations  trouver les descendants sur x génération
il y là de la récurcivité mais en plus je veux pouvoir filtrer tous les ascendants sur x génération ayant telle propriété.

Je me suis donc définit un modèle de table hiérarchique pour utiliser une table hiérarchique je dérive de Model_Table_Rih (représentation Intervalaire de Hierarchie) je fournis le nom des champs impliqué dans la gestion de la hiérarchie et j'ai toutes les méthode précité dispo écrire un table hiérachique prend 5 lignes

A+JYT

Hors ligne

 

#4 12-10-2007 10:06:44

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Interet zend_db_table

Bonjour sekaijin,

Je persiste, il faut que tu écrives des tutoriaux ou un blog sur le ZF smile

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 12-10-2007 13:20:26

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Interet zend_db_table

j'y pense ça me permettrait en autre de rédiger un peut tout ce que je fais avec et surtout de documenter mon travail qui en manque cruellement.

A+JYT

Hors ligne

 

#6 14-10-2007 09:37:49

ALkyD
Membre
Lieu: Limoges
Date d'inscription: 11-07-2007
Messages: 69
Site web

Re: Interet zend_db_table

Salut,
A ce propos sur l'ORM et Zend_Db_Table, j'aimerais savoir si, pour une table SQL, la création de deux classes :
- une classe PHP qui dérive de Zend_Db_Table et qui contient notemment la clé primaire et le nom de la table.
- une classe PHP où je gère les données de cette table, avec des accesseurs, des mutateurs et toutes sortes de méthodes.

... peut sembler normal ?

Hors ligne

 

#7 14-10-2007 12:38:25

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Interet zend_db_table

c'est une question qu'on se pose de façon récurrente
Zend_Db propose Zend_Db_Table et Zend_Db_Row
mais ce ne sont que des propositions

personnellement j'ai choisit une classe pour représenter la collection et une pour représenter les éléments qu'elle contient
à tel point que j'ai des interfaces collectionnable qui ont des méthodes particulière et
je peux ainsi gérer des collection qui ne sont pas des Tables dans une base au même titre qu'une table

la collection représente le gisement alors que les élément les objet qui la compose
on ne fait pas la même chose avec la collection qu'avec sont contenu

donc deux classe me semble la bonne approche. maintenant il y a de nombreux cas ou on n'a pas de traitement particulier à faire sur les éléments donc pas de méthode métier à leur associer on ne fait que les sortir de la collection les modifier et les enregistrer. dans ce cas avoir une classe qui n'a pas de méthode est assez inutile.

mais une fois que tu as pris le plis de deux classe ça va très vite et c'est facile à faire évoluer.

dans des cas très simple le modèle peut même se réduire à une seule classe voire à quelques fonction. mais c'est particulièrement difficile à faire évoluer.

Les MOA n'hésitent pas à demander des changement métier et avoir un ensemble bien structuré et évolutif permet de mieux répondre à ce genre de demande.

A+JYT

Hors ligne

 

#8 17-10-2007 11:25:22

2mx
Membre
Lieu: Grenoble
Date d'inscription: 06-08-2007
Messages: 125

Re: Interet zend_db_table

philippe a écrit:

Bonjour sekaijin,

Je persiste, il faut que tu écrives des tutoriaux ou un blog sur le ZF smile

A+, Philippe

+1 pour que sekaijin écrive des tutoriaux ou un blog ! smile

Hors ligne

 

#9 19-10-2007 15:31:25

Isilgawen
Membre
Lieu: Limoges
Date d'inscription: 23-03-2007
Messages: 106

Re: Interet zend_db_table

+1 pour lesl tutos avec des chti bout de code de ces fameuses classes smile

Par contre je me posais une question pourquoi as tu refait des methodes du style getElementById ou newElement alors que tu hérites de Zend_Db_Table : find() fetchRow() et fetchNew() ?

Dernière modification par Isilgawen (23-10-2007 14:04:47)

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