Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-02-2010 09:26:46

erehcab
Membre
Date d'inscription: 17-11-2009
Messages: 63

Compréhension : création de class dans la librairie ou non

Bonjour à tous,

J'aimerai avoir vos avis sur une façon de faire. Je m'explique; Prenons par exemple une table commande, il y aura donc une class Table_Commande qui hérite de Zend_Db_Table.

J'ai besoin de créer un script me permettant de calculer le montant total d'une commande.

Je créé dans ma librairie un dossier Commande dans lequel je créerai une class MaLibrairie_Total_Commande ou alors je créé une méthode dans la class qui hérite de Zend_Db_Table ?

Quelle est à votre avis la meilleur façon de faire.

Hors ligne

 

#2 04-02-2010 09:46:07

Godzinho
Membre
Lieu: Toulouse
Date d'inscription: 15-10-2009
Messages: 58

Re: Compréhension : création de class dans la librairie ou non

Perso je choisirais d'écrire une méthode dans Table_Commande qui me calcule le montant total d'une commande.
Je ne vois pas l'intérêt de passer par ta librairie perso.

Si quelqu'un a une explication justifiée, je suis également preneur.

Hors ligne

 

#3 04-02-2010 09:48:46

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Compréhension : création de class dans la librairie ou non

Salut,

Si tu utilises directement les tables dans tes controlleurs, la table doit être vue comme une collection et ne devrait contenir que des méthodes de récupérations d'éléments dans cette collection.
Un Zend_Db_Table_Row est un élement de cette collection, une commande donc. Le calcul est donc à faire dans ta classe Row (considérée dans ce cas comme ta classe métier) et non dans la table.

Par exemple dans ta table tu n'auras que des méthodes du type findByCommandNumber(), findAllByDate(), etc etc. et dans ta classe Row toutes les méthodes de manipulation d'une commande.

Pour redéfinir la classe row à utiliser :

Code:

class Row_Command extends Zend_Db_Table_Row_Abstract
{
    public function getTotalAmount()
    {}
}

class Table_Command extends Zend_Db_Table_Abstract
{
    protected $_name = 'command';
    protected $_primary = 'cmd_id';
    protected $_rowClass = 'Row_Command';
}

A+ benjamin.

Dernière modification par Delprog (04-02-2010 09:48:55)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#4 04-02-2010 10:14:15

erehcab
Membre
Date d'inscription: 17-11-2009
Messages: 63

Re: Compréhension : création de class dans la librairie ou non

Ok super explication qui je suppose s'applique à toutes actions en relation avec un éléments Zend_Db_Tabl_Row en provenance d'une collection Zend_Db_Table.

Je prends un autre exemple avec des relations sql, une table article contenant un champ id_langue. Dans le listing de tous les articles je ne veux pas afficher l'identifiant de la langue lié à l'article mais sa désignation, je peux donc aussi le faire dans une class Row ?

Dernière modification par erehcab (04-02-2010 10:17:00)

Hors ligne

 

#5 04-02-2010 10:34:54

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Compréhension : création de class dans la librairie ou non

Non smile

C'est la méthode de ta table qui renvoie le rowset qui fera la jointure. Les row de ton rowset en seront le résultat.

En fait c'est assez simple, tu fais une requête dans ta table et ça te renvoie des row. Si tu veux faire du traitement métier sur tes rows, tu personnalises la classe Row utilisée par la Table.

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#6 04-02-2010 10:56:59

erehcab
Membre
Date d'inscription: 17-11-2009
Messages: 63

Re: Compréhension : création de class dans la librairie ou non

Ok je comprends mais je pense que mes class Table sont mal faites parce que il ne le fait pas automatiquement.

Voilà une de mes class :

Code:

 class Table_Command extends Zend_Db_Table 
{
    /**
     * Nom de la table (vue)
     *
     * @var string
     */
    
    protected $_name = 'command';
    
    /**
     * Clé primaire de la table.
     * 
     * @var string
     */
    
    protected $_primary = 'command_id';
    
    /**
     * Liaisons entre les tables
     *
     * @var array
     */

    protected $_referenceMap = array(
        'utilisateur' => array(
            'columns' => 'id',
            'refTableClass' => 'Table_Utilisateur'
        ),
        'company' => array(
            'columns' => 'company_id',
            'refTableClass' => 'Table_Company'
        )
    );
}

Est ce suffisant pour que la jointure se fasse automatiquement ?

Hors ligne

 

#7 04-02-2010 11:07:06

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Compréhension : création de class dans la librairie ou non

La jointure n'est pas automatique.

Il faut que tu implémentes ta propre méthode qui fait la jointure, où alors tu peux réfléchir à un système d'auto-jointures et redéfinir une abstraction de la classe Table, je crois que certains l'ont fait (sekaijin ?).

Mais le fait de définir les références dans ta table ne sert pas à ça mais à pouvoir récupérer des éléments enfants ou parents.

Imagine par exemple des utilisateurs et des articles, grâce au referenceMap tu pourras récupérer un utilisateur, puis récupérer tous les articles de cet utilisateur (même si c'est quand même déconseillé d'utiliser cette méthode pour des raisons de performances).


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#8 04-02-2010 11:14:13

erehcab
Membre
Date d'inscription: 17-11-2009
Messages: 63

Re: Compréhension : création de class dans la librairie ou non

Ok je vais tester ça. Merci pour toutes ces explications et bonne journée à toi smile

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