Quelques idées pour étendre Zend_Db_Table_Abstract.
Truncate
La commande SQL TRUNCATE permet de supprimer tous les enregistrement d'une table. Elle est plus rapide qu'un DELETE et à l'avantage de réinitialiser à 0 l'auto-incrément. C'est très utile dans le cadre de tests unitaires pour "nettoyer" les tables.
abstract class Wiip_Db_Table_Abstract extends Zend_Db_Table_Abstract { /** * Envoie une commande SQL TRUNCATE à la table */ public function truncate() { $db = $this->getAdapter(); $db->query('TRUNCATE ' . $db->quoteIdentifier($this->_name)); } }
Définir automatiquement le nom de la table
J'ai l'habitude de placer mes modèles dans le répertoire /library/Wiip/Model. Le nom des classes associées à mes tables est donc de la forme Wiip_Model_NomDeLaTable. J'ai donc surchargé la méthode _setupTableName pour qu'elle détermine automatiquement le nom de mes tables à partir du nom de la classe.
abstract class Wiip_Db_Table_Abstract extends Zend_Db_Table_Abstract { /** * Extrait le nom de la table à partir du nom de la classe */ protected function _setupTableName() { if (!$this->_name) { $parts = explode('_', get_class($this)); $this->_name = strtolower(end($parts)); } parent::_setupTableName(); } }
Définir automatiquement la classe associée aux enregistrements
Pour les enregistrements, j'ajoute le préfixe _Row au nom de la classe. Je peux donc définir automatiquement la propriété _rowClass avec le code suivant :
abstract class Wiip_Db_Table_Abstract extends Zend_Db_Table_Abstract { /** * Définit automatiquement le nom de la classe associée aux enregistrements */ public function init() { $this->_rowClass = get_class($this) . '_Row'; } }



Poster un nouveau commentaire