mysql - CakePHP 3 分页器在 ORDER 子句中使用 FIELD()

标签 mysql cakephp pagination cakephp-3.0

我有一个关于 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);

关于mysql - CakePHP 3 分页器在 ORDER 子句中使用 FIELD(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33736594/

相关文章:

mysql - 如何在数据库中创建Service Builder的表?

php - 如何在每个类别的加载页面中仅获取 2 个产品

php - 创建新工作表 PHPExcel

PHP分页颠倒

php - 在 Yii gridview 分页中保留复选框值

php - 转换日期字符串以插入 mysql 日期格式

mysql - ENUM 数据类型的索引

CakePHP 蛋糕烘焙选择默认值后出现错误

php - CakePHP 和 Twitter Bootstrap 工具提示

sql - 处理给定页面编号的基于值的分页