【问题标题】:CakePHP Sort order not affecting all recordsCakePHP 排序顺序不影响所有记录
【发布时间】:2015-12-15 22:29:34
【问题描述】:

在我的 CakePHP 2.7.7 应用程序中,我遇到了一个问题,即使用 PaginatorComponent 无法正确排序我的结果。请参阅此链接以获取图像: Sample Data

数据应按姓氏降序排序,但您可以看到有几个用户似乎不受此数据的影响。不管我按什么顺序,升序或降序,这几条记录都不会被排序。供参考:

用户控制器中的 index():

public function index() {
    $this->User->contain('Status');
    $this->paginate = array(
        'limit' => 15,
        'order' => array('User.last_name' => 'DESC'),
        'conditions' => array('User.department_id =' => $this->Session->read('Auth.User.department_id')),
        'contain' => 'Status'
    );
    $this->set('users', $this->Paginator->paginate());
}

有什么可能导致这种情况的想法吗?我在这里不知所措。提前致谢!

SELECT `User`.`id`, `User`.`first_name`, `User`.`last_name`, `User`.`middle`, `User`.`address`, `User`.`address_2`, `User`.`city`, `User`.`state_id`, `User`.`zip`, `User`.`home`, `User`.`cell`, `User`.`work`, `User`.`email`, `User`.`status_id`, `User`.`status_reason`, `User`.`rank`, `User`.`birthday`, `User`.`gender`, `User`.`school`, `User`.`employer`, `User`.`position`, `User`.`created`, `User`.`modified`, `User`.`updated_by`, `User`.`radio`, `User`.`ident`, `User`.`parent_name`, `User`.`parent_number`, `User`.`parent_email`, `User`.`squad`, `User`.`squad_leader`, `User`.`ride_along`, `User`.`drivers_license`, `User`.`username`, `User`.`password`, `User`.`department_id`, `User`.`join_date`, `User`.`group_id`, `User`.`test`, (CONCAT(`User`.`first_name`, " ", `User`.`last_name`)) AS `User__name`, `Status`.`id`, `Status`.`status` FROM `admin_cake`.`users` AS `User` LEFT JOIN `admin_cake`.`statuses` AS `Status` ON (`User`.`status_id` = `Status`.`id`) WHERE `User`.`department_id` = 1 ORDER BY `User`.`last_name` ASC LIMIT 15

【问题讨论】:

  • 为此生成的 SQL 查询是什么?
  • 确保姓氏没有前导空格。
  • @drmonkeyninja 我用示例查询更新了问题。
  • @InigoFlores 我也是这么想的,但我似乎找不到任何有多余空格的记录。
  • @Jason 你的 SQL 看起来是正确的。如果您直接在数据库上运行此查询,您会得到所需的结果还是不正确?如果查询失败,这个问题最好改写为 MySQL 问题而不是 Cake 问题。

标签: mysql sorting cakephp cakephp-2.x cakephp-2.7


【解决方案1】:

当你使用 $this->paginate 设置条件时,限制...你需要使用函数 $this->pagination()。 $this->pagination 和 $this->Paginator->pagination() 不能合并使用。

1)

public function index() {
    $this->User->contain('Status');
    $this->paginate = array(
        'limit' => 15,
        'order' => array('User.last_name' => 'DESC'),
        'conditions' => array('User.department_id =' => $this->Session->read('Auth.User.department_id')),
        'contain' => 'Status'
    );
    // Assign settings
    $this->Paginator->settings = $this->paginate;
    $this->set('users', $this->Paginator->paginate());
}

2)

public function index() {
    $this->User->contain('Status');
    $this->paginate = array(
        'limit' => 15,
        'order' => array('User.last_name' => 'DESC'),
        'conditions' => array('User.department_id =' => $this->Session->read('Auth.User.department_id')),
        'contain' => 'Status'
    );
    //Don't use $this->Paginator->paginate()
    $this->set('users', $this->paginate());
}

【讨论】:

  • 我最初拥有$this->paginate(),但将$this->Paginator->paginate() 与我正在尝试的其他一些事情混为一谈。我将其切换回来并得到相同的结果。
猜你喜欢
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 2014-12-05
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多