CakePHP 3:如何使用自定义分页?

时间:2017-02-19 17:01:28

标签: php cakephp pagination paginator

我没有成功使用自定义查询的分页。我完全按照文档中的内容进行操作,但它不起作用。关键是要对一个记录列表进行分页,使标记“有效”。到了' Y'或者' N'。

在控制器中:

if (!isset($this->request->query['valid']) || $this->request->query['valid'] == '')
  $allFilters['valid'] = 'N';
else
  $allFilters['valid'] = 'Y';
$this->paginate = ['finder' => ['curnames' => $allFilters]];
$data = $this->paginate($this->Names)->toArray();

在模型中:

public $paginate = ['finder' => 'curnames', 'limit' => 25, 'order' => ['Names.id' => 'asc']];

public function findCurnames(Query $query, array $options) {
  $query->where([
    'valid' => $option['valid']
  ]);
  return $query;
}  

当我执行代码时,我得到一个Cake\Network\Exception\NotFoundException异常。我缺少什么?

更新:版本为3.3。执行此操作时会触发错误:

$data = $this->paginate($this->Names)->toArray();

更新:在控制器中,我更改了行

$this->paginate = ['finder' => ['curnames' => $allFilters]];

$paginate = ['finder' => ['curnames' => $allFilters]];

并且错误不再弹出。但条件过滤了有效的' =' Y'或者' N'没有考虑到。所以它仍然无法运作。

2 个答案:

答案 0 :(得分:0)

我得到了答案。错误来自错字。正确的代码应该是

'valid' => $options['valid']

带有'的选项。 现在它有效。

答案 1 :(得分:0)

做这样的事情不是更容易(没有任何自定义查找器方法):

if ($this->request->getQuery('valid', '') == '')
  $valid = 'N';
else
  $valid = 'Y';

$this->paginate = [
  'limit' => 25,
  'order' => ['Names.id' => 'asc']
];
$query = $this->Names->find('all')
  ->where([
    'valid' => $valid
  ]);
$data = $this->paginate($query)->toArray();