我有一个关于 CakePHP3 (3.0.13) 分页器组件的问题。我正在使用 MYSQL 函数
FIELD()
来排序我的数据,如下所示:
$this->paginate = array_merge_recursive([
'conditions' => [
'zip IN' => $zips
],
'order' => [
'FIELD(zip, '.rtrim(implode(',', $zips), ',').')',
'ispro' => 'desc',
],
$this->paginate
]);
当我将此应用于我的
$this->paginate()
时,只要设置了查询参数 sort
,它就不会被识别。为了避免这种情况,我删除了请求中的 sort
:
if (isset($this->request->query['sort'])) {
unset($this->request->query['sort']);
}
这是可行的,但我想知道是否有更好的解决方案,也许在分页器组件本身中,我还没有找到。
您可以在分页之前对查询进行排序。您的排序条件将位于分页器组件附加的排序条件之前
所以你可以做
$dentists = $this->Dentists->find()
->order([
'FIELD(zip, '.rtrim(implode(',', $zips), ',').')',
'ispro' => 'desc'
]);
$this->paginate = array_merge_recursive([
'conditions' => [
'zip IN' => $zips
],
$this->paginate
]);
$dentists = $this->paginate($dentists);