簡體   English   中英

CakePHP按一列排序,然后按另一列排序

[英]CakePHP sort by one column then another column

在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  |

也許在那之后按任務名稱排序..

謝謝

嘗試這個:

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

如果您使用html表來呈現結果。 然后,為了實現所述功能,一種可能的解決方案是在列標題的點擊上發送ajax請求。 在控制器中,您可以將先前請求的已排序列保存到ajax中。 在下一個排序請求期間,檢查是否收到任何其他先前的排序請求。

如果您可以使用jquery插件, 此鏈接將幫助您對多列進行排序。

輕松插入'paramType'=>'querystring',顯示代碼示例:

$this->paginate = array(
'conditions' => $conditions,
'order' => array(
    'Post.name' => 'ASC',
    'Post.created' => 'DESC',

),
'paramType' => 'querystring',

);

$this->set('posts', $this->paginate('Post'));

Saludos :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM