在读取数据方面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');
来按各种形式取得自己想要的数据结果了。