如何限制cakephp中的paginate?
假设我有400条记录 我需要从第50记录到第75记录中只获得25条记录 并且需要每页显示5条记录 我怎么能在paginate中做到这一点?
示例代码:
$this->paginate = array(
'contain'=>array('User'),
'recursive' => 2,
'order' => array('Profile.winning' => 'DESC'),
'limit' =>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'));
}