现在的位置: 首页 > 综合 > 正文

Zend_Db_Table的按字段取数据问题和解决方法

2018年01月30日 ⁄ 综合 ⁄ 共 1059字 ⁄ 字号 评论关闭

在读取数据方面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');

 

来按各种形式取得自己想要的数据结果了。

抱歉!评论已关闭.