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.