如何限制cakephp中的paginate

时间:2011-05-27 12:45:42

标签: cakephp cakephp-1.3 cakephp-1.2

如何限制cakephp中的paginate?

假设我有400条记录 我需要从第50记录到第75记录中只获得25条记录 并且需要每页显示5条记录 我怎么能在paginate中做到这一点?

示例代码:

        $this->paginate = array(
                'contain'=>array('User'),
                'recursive' => 2,
                'order' => array('Profile.winning' => 'DESC'),
                'limit' =>5

            );

5 个答案:

答案 0 :(得分:10)

您可以为分页设置条件。

function listRecords()
  {
  $this->paginate = array(
    'conditions' => array('Model.id >=' => 50, 'Model.id <=' => 75),
    'limit' => 5
    );
  $this->paginate('Model');
  );

编辑:

来自here的解决方案:

$this->paginate = array(
  'limit' => 20,
  'totallimit' => 1000
  );

然后在模型中:

public function paginateCount($conditions = null, $recursive = 0, $extra = array())
  {
  if( isset($extra['totallimit']) ) return $extra['totallimit'];
  }

答案 1 :(得分:2)

改进版本参考:http://www.mainelydesign.com/blog/view/best-paginatecount-cakephp-with-group-by-support

根据较小者返回正确的总计数。

public function paginateCount($conditions = null, $recursive = 0, $extra = array()) 
    {
        $conditions = compact('conditions');
        if ($recursive != $this->recursive) {
            $conditions['recursive'] = $recursive;
        }
        unset( $extra['contain'] );
        $count = $this->find('count', array_merge($conditions, $extra));

        if (isset($extra['group'])) {
            $count = $this->getAffectedRows();
        }

        if (isset($extra['totallimit']) && $extra['totallimit'] < $count) {
            return $extra['totallimit'];
        }

        return $count;
    }

答案 2 :(得分:1)

在CakePHP v2.x中使用maxLimit

public $paginate = array(
    // other keys here.
    'maxLimit' => 10
);

详细了解here

答案 3 :(得分:0)

$query = $this->User->find('all', [
    'recursive' => 2,
    'order' => array('Profile.winning' => 'DESC'),
    'limit' => 25, 
    'offset' => 50
]);
$this->paginate = array(
    $query,
    'limit' => 5
);

答案 4 :(得分:0)

在 cakephp 4.x 版本中,我们必须像下面这样调用

 public function index()
    {
        $this->loadComponent('Paginator');
        $settings = array(
            'limit' => 50
        );
        $prices = $this->Paginator->paginate($this->Prices->find(), $settings);
        $this->set(compact('prices'));
    }