Personalmente todas los accesos a la base de datos (persistencia) la manejo en una clase de modelo por tabla, de la siguiente forma:
Código PHP:
class News_Model_News extends Zend_Db_Table_Abstract
{
protected $_primary = 'id';
protected $_name = 'news';
public function getNewsListForMonthYear($month, $year) {
$db = $this->getAdapter();
$select = $db->select();
$select->from(array('n' => $this->_name), array('id', 'posterid', 'postername', 'subject', 'time'));
$select->joinLeft(array('p' => 'users'),'n.posterid = p.user_id',array('username'));
$select->where('n.month = ?', $month);
$select->where('n.year = ?', $year);
$select->where('n.active= ?', 1);
$select->order('n.id DESC');
return $db->fetchAll($select->__toString());
}
public function getListNews() {
return $this->fetchAll();
}
public function getNews( $news_id ) {
$db = $this->getAdapter();
$where = $db->quoteInto('id = ?', $news_id);
return $this->fetchRow($where, null);
}
public function delete($news_id){
$db = $this->getAdapter();
$where = $db->quoteInto('id = ?', $news_id);
$rowsAffected = parent::delete($where);
return $rowsAffected;
}
}
Como veras todo el modelo de una tabla queda en una sola clase y aprovecho esta para hacer consultas más elaboradas utilizando Zend_Db_Select.
En definitiva Zend_Db_Select o Zend_Db_Table la utilizo dentro del contexto de la clase Modelo (Zend_Db_Table_Abstract), Zend_Db_Select en casos de consultas más complejas.