我对The Zend框架相对较新,可能只用了1个月。我的查询运行速度太慢。该页面需要几分钟才能加载。在我的查询中,它是抓取所有记录还是仅获得我需要的页面数量?我可以应用限制从数据库中获取内容吗?
我的代码如下。
public function init() {
$db = Zend_Registry::get('db');
$sql = 'SELECT * FROM employee ';
$result = $db->fetchAll($sql);
$page=$this->_getParam('page',1);
$paginator = Zend_Paginator::factory($result);
$paginator->setItemCountPerPage(5);
$paginator->setCurrentPageNumber($page);
$this->view->paginator=$paginator;
}
我会很乐意为你提供任何帮助。
答案 0 :(得分:0)
因为您向Paginator工厂提供Db查询,所以Paginator在大多数情况下会使用DbSelect Paginator适配器。该适配器将使最小的查询成为可能,以满足对Paginator的要求。
为确保Paginator使用正确的适配器,您可以传递一个字符串作为第二个arg。
$paginator = Zend_Paginator::factory($result, 'DbSelect');
摘自参考文献:
注意:而不是选择给定查询的每个匹配行 DbSelect和DbTableSelect适配器仅检索最小量 显示当前页面所需的数据。
因此,动态生成第二个查询以确定 匹配行的总数。但是,可以直接进行 自己提供计数或计数查询。请参阅setRowCount()方法 在DbSelect适配器中获取更多信息。
如果使用数据库分析,则可以看到生成限制和偏移查询的位置。
注意:强>
在大多数情况下,Zend_Db会将SQL select查询转换为Zend_Db_Select对象。如果您发现自己处于极少数情况下并非如此,则需要使用Paginator的数组适配器或将sql重构为Zend_Db_Select对象。这应该是非常罕见的。
在init()方法中看到一个paginator实例也很不寻常。 init()将在对该控制器的每个请求上运行。