zend paginator问题

mik*_*mik 1 php pagination zend-framework

我想在我的项目中使用Zend Paginator进行原始sql查询(而不是Dbselect).我不能使用Dbselect,因为我在主sql查询中有几个子查询.从手册中我发现唯一的方法就是在这样的结果数组上使用分页

$paginator = Zend_Paginator::factory($array);
Run Code Online (Sandbox Code Playgroud)

但是我在查询中有很多记录,对我来说这看起来不错.有什么方法可以解决这个问题吗?

Ste*_*rig 8

如果你的查询真的那么复杂,你不能使用,Zend_Db_Select你可以求助于编写自己Zend_Paginator_Adapter的查询并不像听起来那么复杂.

您的相应类只能实现,Zend_Paginator_Adapter_Interface以允许您将类传递给Zend_Paginator构造函数.

以下是一个简单的例子 - 你可以把它当作一个起点......

class App_Model_ListOfItems implements Zend_Paginator_Adapter_Interface
{
    /**
     * @var Zend_Db_Adapter_Abstract
     */
    protected $_db;

    /**
     * @param Zend_Db_Adapter_Abstract $db
     */
    public function __construct(Zend_Db_Adapter_Abstract $db)
    {
        $this->_db = $db;
    }

    /**
     * @implements Zend_Paginator_Adapter_Interface
     * @return integer
     */
    public function count()
    {
        return (int)$this->_db->fetchOne('SELECT COUNT(*) FROM <<add your query to determine the total row count here>>');
    }

    /**
     * @implements Zend_Paginator_Adapter_Interface
     * @param  integer $offset
     * @param  integer $itemCountPerPage
     * @return array
     */
    public function getItems($offset, $itemCountPerPage)
    {
        $sql = 'SELECT <<add your columns, tables, joins and subqueries as needed>> LIMIT ' . 
            (int)$offset . ', ' . (int)$itemCountPerPage;
        return $this->_db->fetchAll($sql);
    }
}

$paginator = new Zend_Paginator(new App_Model_ListOfItems($db));
Run Code Online (Sandbox Code Playgroud)