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

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.