Zend_Db_Table 实现选择特定字段
通过继承Zend_Db_Table类,可以方便地进行数据库操作:
程序代码
是的,就这么简单。然后,便可以操作它了,以显示列表为例:
程序代码
如此,所有新闻都出来了。
有两个很明显的问题:一、默认选择所有列,即“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类里写了一个方法:
程序代码
同时,Controller页里也修改为:
程序代码
出来了!这正是我要的结果!
程序代码<?php
class News extends Zend_Db_Table
{
protected $_name = 'news';
}
class News extends Zend_Db_Table
{
protected $_name = 'news';
}
是的,就这么简单。然后,便可以操作它了,以显示列表为例:
程序代码function indexAction()
{
$news = new News();
$this->view->news = $news->fetchAll();
}
{
$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);
}
{
$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();
}
{
$news = new News();
$this->view->news =$news->listNews();
}
出来了!这正是我要的结果!

