Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-10-2009 14:31:05

citronbleu-v
Membre
Lieu: Béziers ou Arles
Date d'inscription: 03-02-2009
Messages: 79
Site web

[Reflexion | Méthode] Bonne utilisateur du Mapper ?

Bonjour,

je suis entrain d'utiliser les mapper et je voudrais savoir si je fais correctement les choses. Si je comprends bien un Mapper sert à éviter à l'objet métier d'accéder directement à la base de données.

Voilà mon Objet métier :

Code:

<?php

class ObjetMetier_Article
{
    protected $_mapper;
    
    /** 
     * Data contient toutes les colonnes de la table article 
     * ça m'évite de faire plein de getter et setter sachant que j'ai 20 colonnes dans la table article 
     */
    protected $_data;
    protected $_all;
    
    protected $_id;
    protected $_dateInsert;
    protected $_documents;

    public function setData($data)
    {
        $this->_data = $data;
        return $this;
    }
    
    public function getData()
    {
        return $this->_data;
    }
    
    public function setId($id)
    {
        $this->_id = $id;
        return $this;
    }
        
    public function getId()
    {
        return $_id;
    }
    
    public function setDateInsert($dateInsert)
    {
        .... // la je fais des opérations pour reformaté la date ex : 10 janvier 2009
        $this->_dateInsert = $dateInsert;
        return $this;
    }
        
    public function getDateInsert()
    {
        return $_dateInsert;
    }
    
    /**
     * Récupère tous les articles
     */    
    public function fetchAll()
    {
        if (! $this->_all) {
            $this->_all = $this->getMapper()->fetchAll()
        }
        
        return $this->_all;
    }
    
    
    /** 
     * Ici on récupère tous les documents liés a 1 article (dans la bdd relation n,n)
     * Là j'aimerai savoir si c'est bien fait ou pas
     */
    public function fetchAllDocuments()
    {
        if (! $this->_documents) {
            $this->getMapper()->fetchAllDocuments($this);
        }
        
        return $this->_documents;
    }
        
    public function setMapper() { .... }

    public function getMapper() { .... }
    
    public function __get() { .... }
    
    public function __set() { .... }

}

Et mon Mapper

Code:

<?php

class ObjetMetier_ArticleMapper
{
    ...
    public function fetchAll()
    {
        $fetch = $this->getDbTable()->fetchAll(); // getDbTable récupère donc l'objet Article qui étend Zend_Db_Table_Abstract
        
        $result = array()
        foreach($fetch as $row) {
            $objetMetier = new ObjetMetier_Article();
            
            $result[] = $objetMetier->setId($row->id)
                                    ->setDateInsert($row->dateInsert)
                                    ->setData($row); 
        }
        
        return $result;
    }
    
    public function fetchAllDocuments(ObjetMetier_Article $objetMetierArticle)
    {
        $where = $this->getDbTable()
                      ->select()
                       ->setIntegrityCheck(false)
                       ->from(array('a' => 'article'))
                       ->joinLeft(array('ad' => 'article_document'), 'a.id_article = ad.id_article')
                       ->joinLeft(array('d' => 'document'), 'd.id_document = ad.id_document')
                      ->where('ad.id_article = ?', $objetMetierArticle->getId());
                           
        $document->fetchAll($where);
        
        $result = array()
        foreach($fetch as $row) {
            $ObjetMetierFile = new ObjetMetier_File();
            
            $result[] = $ObjetMetierFile->setId($row->id_document)
                                        ->setData($row); 
        }
        
        return $result;
    }
    ...
}

Dernière modification par citronbleu-v (29-10-2009 14:38:11)

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