Zend_Db_Table 实现选择特定字段

通过继承Zend_Db_Table类,可以方便地进行数据库操作:

程序代码 程序代码
<?php
class News extends Zend_Db_Table
{
    protected $_name = 'news';
}


是的,就这么简单。然后,便可以操作它了,以显示列表为例:

程序代码 程序代码
function indexAction()
{
    $news = new News();
    $this->view->news = $news->fetchAll();
}

如此,所有新闻都出来了。

有两个很明显的问题:一、默认选择所有列,即“Select * FROM `news`”。这将十分耗费资源——尤其是,新闻带有正文;二、fetAll方法是返回所有行

现在找到了解决办法,目前实现了选定特定字段,而不是所有字段。
我对ZF也不是很熟悉,官方的文档也不像MSDN那样,有该类的所有成员及介绍。通过查看源码发现了其中有一个$_col属性。试图给该属性赋值,发现结果并未改变——该属性应该是只读的,这是源码里的注释:The table column names derived from Zend_Db_Adapter_Abstract::describeTable().

继续看源码,发现了_fetch方法,原型是:_fetch(Zend_Db_Table_Select $select)。同时你会发现,有一个select方法,它返回的就是当前的Zend_Db_Table_Select对象。于是,我试着在News类里写了一个方法:

程序代码 程序代码
function listNews($pagenum = 0, $pagesize = 15) //这两个参数为分页预留
    {
        $s = $this->select();
        $s->from($this->_name,array('id','title'));
        return $this->_fetch($s);
    }


同时,Controller页里也修改为:
程序代码 程序代码
function indexAction()
    {
        $news = new News();
        $this->view->news =$news->listNews();
    }

出来了!这正是我要的结果!


评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.