Etendre Zend_Db_Table_Abstract

Logo Zend Framework

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.

<?php
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.

<?php
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 :

<?php
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';
    }
}
?>

Ajouter un commentaire