【发布时间】:2016-02-17 14:57:17
【问题描述】:
我有一个关于 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']);
}
这是可行的,但我想知道是否有更好的解决方案,可能在分页器组件本身中,我还没有找到。
【问题讨论】:
-
请提及您的 cakephp 版本。还要贴出你使用 FIELD() 函数的代码
-
我用的是 cake 3.0.13。
-
我想您应该将计算字段添加到 sortWhitelist 选项
-
你的意思是像
$this->paginate('sortWhitelist' =>[ 'zip']);?已经试过了,但是不行。 -
您正在创建一个新的计算字段。所以你应该做
$this->paginate('sortWhitelist' =>[ 'FIELD(zip, '.rtrim(implode(',', $zips), ',').')'])
标签: mysql cakephp pagination cakephp-3.0