Zend 1 Paginator限制

时间:2016-03-11 18:24:34

标签: php zend-framework zend-paginator

我正在使用Zend 1(1.12),我正在使用Zend_Paginator类在网页上显示查询结果。然而,有大量的记录(超过一百万),而且实际上,在大多数情况下,他们只需要或想要搜索最近的1000个左右的记录。

问题是,我已经将网页的一部分设置为“每页”值,这本身就会产生限制(如果它们不再位于搜索的“第1页”,则会产生偏移。)< / p>

基本上,我要问的是,有没有办法告诉Zend_Pagintor“只获取前1000条记录,然后根据用户的每页选择对它们进行分页”?

我已经尝试将limit参数传递到我正在使用的接口中,但是Zend_Paginator似乎忽略了这一点,获取所有结果,然后对它们进行分页。

function getRecords($currentPage)
{
    $select = "select * from table where user_id = 1 limit 1000"; 
    /* $select is actually a Zend_Db_Table_Select object, not a string. */
    $paginator = new Zend_Paginator::factory($select);
    $paginator->setItemCountPerPage(25);
    $paginator->setCurrentPageNumber($currentPage);

    return $paginator;
}

($ select显然是一个占位符。)

2 个答案:

答案 0 :(得分:2)

手动设置总行数

$select = "select * from table where user_id = 1";
$paginator = new Zend_Paginator::factory($select);
$paginator->getAdapter()->setRowCount(1000);
...

答案 1 :(得分:0)

尝试从有限的查询中创建SQL视图:

CREATE OR REPLACE VIEW table_view AS
SELECT * 
FROM table 
WHERE user_id = 1 
LIMIT 1000

此视图将仅返回您想要的行(在本例中为1000行),然后将Zend_Db_Table_Select切换到此视图并像getRecord方法一样创建分页器。