如何限制cakephp中的分页?
假设我有 400 条记录。
我只需要获取从第50条记录到第75条记录的25条记录
并且每页需要显示5条记录。
我如何在分页中做到这一点?
示例代码:
$this->paginate = array(
'contain'=>array('User'),
'recursive' => 2,
'order' => array('Profile.winning' => 'DESC'),
'limit' =>5
);
可以设置分页条件。
function listRecords()
{
$this->paginate = array(
'conditions' => array('Model.id >=' => 50, 'Model.id <=' => 75),
'limit' => 5
);
$this->paginate('Model');
);
来自这里的解决方案:
$this->paginate = array(
'limit' => 20,
'totallimit' => 1000
);
然后在模型中:
public function paginateCount($conditions = null, $recursive = 0, $extra = array())
{
if( isset($extra['totallimit']) ) return $extra['totallimit'];
}
改进版本参考: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;
}
在 CakePHP v2.x 中使用
maxLimit
.
public $paginate = array(
// other keys here.
'maxLimit' => 10
);
阅读更多相关信息这里。
$query = $this->User->find('all', [
'recursive' => 2,
'order' => array('Profile.winning' => 'DESC'),
'limit' => 25,
'offset' => 50
]);
$this->paginate = array(
$query,
'limit' => 5
);
在 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'));
}