Quelques idées pour étendre Zend_Db_Table_Abstract.
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));
}
}
?>
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();
}
}
?>
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';
}
}
?>