为什么 CakePHP 3.2 分页器不对我的查询结果进行排序?
Why won't CakePHP 3.2 Paginator sort on my query results?
来自控制器的 CakePHP 查询等:
$ratings = $this->Ratings->find('all')->group('manufacturer');
$ratings->select(['manufacturer',
'count' => $ratings->func()->count('*'),
'max' => $ratings->func()->max('psi_score'),
'min' => $ratings->func()->min('psi_score')]);
$ratings = $this->paginate($ratings);
$this->set(compact('ratings'));
$this->set('_serialize', ['ratings']);
这是 debug($ratings)
产生的结果:
'items' => [
(int) 0 => object(Cake\ORM\Entity) {
'manufacturer' => 'A10Green Technology',
'count' => (int) 8,
'max' => '7.41',
'min' => '6.57',
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'Ratings'
},
在视图中,按 manufacturer
排序工作正常。那是一个原始的数据库字段。 count
、max
和 min
值未排序。
以下是视图的 sort
调用:
<th><?= $this->Paginator->sort('manufacturer')?></th>
<th><?= $this->Paginator->sort('count')?></th>
<th><?= $this->Paginator->sort('max')?></th>
<th><?= $this->Paginator->sort('max')?></th>
您需要将要允许排序的字段列入白名单,例如:Pagination
public $paginate = [
'sortWhitelist' => [
'id', 'title', 'Users.username', 'created'
]
];
否则默认cake 3会挡住它
来自控制器的 CakePHP 查询等:
$ratings = $this->Ratings->find('all')->group('manufacturer');
$ratings->select(['manufacturer',
'count' => $ratings->func()->count('*'),
'max' => $ratings->func()->max('psi_score'),
'min' => $ratings->func()->min('psi_score')]);
$ratings = $this->paginate($ratings);
$this->set(compact('ratings'));
$this->set('_serialize', ['ratings']);
这是 debug($ratings)
产生的结果:
'items' => [
(int) 0 => object(Cake\ORM\Entity) {
'manufacturer' => 'A10Green Technology',
'count' => (int) 8,
'max' => '7.41',
'min' => '6.57',
'[new]' => false,
'[accessible]' => [
'*' => true
],
'[dirty]' => [],
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'Ratings'
},
在视图中,按 manufacturer
排序工作正常。那是一个原始的数据库字段。 count
、max
和 min
值未排序。
以下是视图的 sort
调用:
<th><?= $this->Paginator->sort('manufacturer')?></th>
<th><?= $this->Paginator->sort('count')?></th>
<th><?= $this->Paginator->sort('max')?></th>
<th><?= $this->Paginator->sort('max')?></th>
您需要将要允许排序的字段列入白名单,例如:Pagination
public $paginate = [
'sortWhitelist' => [
'id', 'title', 'Users.username', 'created'
]
];
否则默认cake 3会挡住它