CakePHP 3 Paginator在ORDER子句中使用FIELD()

时间:2015-11-16 13:29:00

标签: mysql cakephp pagination cakephp-3.0

我有一个关于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组件本身,我还没有找到。

1 个答案:

答案 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);