在读取数据方面Zend_Db_Table只给出了fetchAll和fetchRow,虽然说自己也可以继承Zend_Db_Table_Abstract来写更多的方法,但是不禁疑问Zend在这方面为什么要弱化它呢,如果对于一个article表,然后只想取出id和title字段数据的话那也太费资源了,虽然说也可以通过缓存来提升性能,但这样未免受到约束。
Zend_Db_Adapter_Abstract里有fetchRow, fetchPairs,fetchCol,fetchOne,fetchAssoc等这些个方法,我写了一个 Zend_Db_Table扩展来利用Adapter里的这些方法
首先先extends Zend_Db_Table_Abstract
方法如下:
/**
* 使用Zend_Db_Adapter的fetchRow, fetchPairs,fetchCol,fetchOne,fetchAssoc等
* @param string|array $fetch 需要取得的字段
* @param string $fetchType 执行方法
* 其它略,参见Zend_Db_Table_Abstract的fetchAll
*/
public function fetchData($fetch, $fetchType = 'fetchRow', $where = null, $order = null, $count = null, $offset = null) {
if (!($fetch instanceof Zend_Db_Table_Select)) {
$select = $this->select();
$select->from($this->info(self::NAME), $fetch, $this->info(self::SCHEMA));
if ($where !== null) {
$this->_where($select, $where);
}
if ($order !== null) {
$this->_order($select, $order);
}
if ($count !== null || $offset !== null) {
$select->limit($count, $offset);
}
} else {
$select = $fetch;
}
return $this->_db->$fetchType($select);
}
这样通过Zend_Db_Table就可以使用
$this->fetchData(array('id', 'title'), 'fetchPairs');
来按各种形式取得自己想要的数据结果了。