我有一个关于CakePHP3的Paginator组件的问题(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']);
}
这是有效的,但我想知道是否有更好的解决方案,可能在paginator组件本身,我还没有找到。
答案 0 :(得分:2)
您可以在对其进行分页之前对其进行排序。您的排序条件将在paginator组件附加的条件之前
所以你可以做到
$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);