Aller plus loin avec Zend_Db_Table
By Geoffrey on Thursday 7 September 2006, 23:25 - Coding - Permalink
Nous avons vu précédemment les bases de l'utilisation du composant Zend_Db, qui nous permet de manipuler les tables via les actions de base CRUD. Malheureusement, dans la plupart des cas, les outils fournis ne suffisent pas, et le besoin de pouvoir gérer les tables de données d'une manière plus fine et surtout plus spécifique se fait sentir. C'est là qu'entre en jeu le surclassage.
En effet, comme nous l'avons vu la dernière fois, utiliser Zend_Db_Table se résumé, pour débuter, à un simple surclassage:
class Members extends Zend_Db_Table {
}
Cette méthode laisse le champs libre à la création de méthodes spécifiques à chaque table. Nous pouvons par exemple vouloir remplir des champs automatiquement à chaque insertion ou mise à jour, par exemple des champs created_on et/ou updated_on:
class Members extends Zend_Db_Table {
public function insert(&$data) {
if (!isset($data['created_on'])) {
$data['created_on'] = date('Y-m-d H:i:s');
}
return parent::insert($data);
}
public function update(&$data, $where) {
if (!isset($data['updated_on'])) {
$data['updated_on'] = date('Y-m-d H:i:s');
}
return parent::update($data, $where);
}
}
Note: Dans cet exemple, vous pouvez constater que la variable $data de la méthode update est passée par référence. C'est tout simplement pour respecter la définition originelle des méthodes, ce qui est requis pour passer le niveau d'erreur E_STRICT.
Nous pouvons également redéfinir le comportement d'une action:
class Members extends Zend_Db_Table {
public function delete($where) {
$data = array(
'status' => 0,
);
return $this->update($data, $where);
}
}
Il est aussi possible de définir nos propres méthodes de recherche ou d'écriture:
class Members extends Zend_Db_Table {
public function findByMail($mail) {
$where = $this->_quoteInto('mail = ?', $mail);
return $this->fetchRow($where);
}
public function getByZipcode($zipcode) {
$where = $this->_quoteInto('zipcode = ?', $zipcode);
return $this->fetchAll($where);
}
function updateById(&$data, $id) {
$where = $this->_quoteInto('id = ?', $id);
return $this->update($data, $where);
}
private function _quoteInto($mask, $value) {
return $this->getAdapter()->quoteInto($mask, $value);
}
}
On notera ici la création également d'une méthode privée qui n'est qu'un raccourci pour protéger les clauses WHERE contre les injections SQL.
Comments
Salut Geoffrey, je déterre tes archives :-)
Le premier lien de l'article pointe vers un "Document not found" au lieu de pointer vers http://fashion.hosmoz.net/post/2006...
merci c'est corrigé :-)