Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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 :
<?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
<?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