【问题标题】:CakePHP sort by one column then another columnCakePHP 按一列然后另一列排序
【发布时间】:2014-03-17 07:41:03
【问题描述】:

CakePHP 中是否有按多列对分页进行排序? 我有这个代码

$this->paginate = array(
    'Project' => array(
        'limit' => $limit,
        'fields' => array(
                    'DISTINCT (Project.id) AS id',
                    'Project.project_type_id',
                    'Project.contact_id',
                    'Project.company_id',
                    'Project.due_date',
                    'Project.subject',
                    'Project.description',
                    'Project.created',
                    'Project.creator',
                    'Project.project_status_id',
                    'Project.modified',
                    'Project.complete_date',
                    ),
        'joins' => array(
            array(
                'table' => 'project_reminder_users',
                'alias' => 'ProjectReminderUser',
                'type' => 'left',
                'conditions' => array(
                    'Project.id=ProjectReminderUser.project_id',
                ),
            ),
        ),              
        'conditions' => array(
            'User.group_id' => $this->Session->read('Auth.User.group_id'),
            'Project.creator' => $this->Session->read('Auth.User.id'),
        ),
        'order' => 'Project.project_status_id',
    )
);

$this->set('groupTasks', $this->paginate('Project'));

它会导致类似 Project.project_status_id 的顺序

Task Name   |   Due Date    |   Status  |
Task 1      |   -           |   Open    |
Task 2      |   2/15/2014   |   Open    |
Task 3      |   2/28/2014   |   Open    |
Task 4      |   2/20/2014   |   Open    |
Task 5      |   -           |   Open    |
Task 6      |   -           |   Open    |
Task 7      |   -           |   Closed  |
Task 8      |   -           |   Closed  |

无论如何,它可以按状态排序,然后按截止日期排序,所以它看起来像这样

Task Name   |   Due Date    |   Status  |
Task 1      |   -           |   Open    |
Task 5      |   -           |   Open    |
Task 6      |   -           |   Open    |
Task 2      |   2/15/2014   |   Open    |
Task 4      |   2/20/2014   |   Open    |
Task 3      |   2/28/2014   |   Open    |
Task 7      |   -           |   Closed  |
Task 8      |   -           |   Closed  |

也许在按任务名称排序之后..

谢谢

【问题讨论】:

    标签: php sorting cakephp pagination


    【解决方案1】:

    试试这个:

    'order' => array(
        'first_field' => 'DESC',
        'second_field' => 'ASC'
    )
    

    【讨论】:

    • 这是有效的,但只有一次(当它第一次出现时),但是一旦用户点击说状态来排序,所以在顶部“关闭”,这不再维持顺序,只维持一个其中。有任何解决这个问题的方法吗?例如:如果用户点击状态,它将在第一行显示“关闭”,如果用户再次点击状态,它应该回到它应该回到的位置,但它不是。
    【解决方案2】:

    如果您使用 html 表格来呈现结果。然后要实现所述功能,一种可能的解决方案是在单击列标题时发送 ajax 请求。在控制器中,您可以将先前请求的排序列保存到 ajax 中。并且在下一个排序请求期间,检查是否有任何其他先前的排序请求收到。

    如果你可以使用 jquery 插件,this link 将帮助你对多列进行排序。

    【讨论】:

      【解决方案3】:

      轻松插入 'paramType' => 'querystring',显示代码示例:

      $this->paginate = array(
      'conditions' => $conditions,
      'order' => array(
          'Post.name' => 'ASC',
          'Post.created' => 'DESC',
      
      ),
      'paramType' => 'querystring',
      
      );
      
      $this->set('posts', $this->paginate('Post'));
      

      Saludos :-)

      【讨论】:

        猜你喜欢
        • 2020-12-14
        • 2011-01-25
        • 1970-01-01
        • 2018-10-23
        • 2016-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多