【发布时间】:2017-10-11 17:46:40
【问题描述】:
版本:3.3.*
我正在使用 $paginator->sort() 方法在我的 CMS 中的分页搜索结果表的列标题中创建链接。您应该能够单击它们一次以按升序排序,然后再次单击以反转为降序。但反过来对我来说从来没有用过。
但这并不适用于所有领域。假设我有 5 个字段。
<tr class="design">
<th scope="col"><?= $this->Paginator->sort('Students.id','Id',array('class'=>'link')); ?></th>
<th scope="col"><?php echo $this->Paginator->sort('Students.userName','Name',array('class'=>'link')); ?></th>
<th scope="col"><?php echo $this->Paginator->sort('Students.age','Age',array('class'=>'link')); ?></th>
<th scope="col"><?php echo $this->Paginator->sort('Students.currentClass','Class',array('class'=>'link')); ?></th>
<th scope="col"><?php echo $this->Paginator->sort('Students.dateJoined','Joined Date',array('class'=>'link')); ?></th>
</tr>
我可以使用username、age 和school 对表格进行两种排序,但不能使用id 和joined。当我最初获取列表时,我在模型函数中指定以升序获取基于id 和joined 的结果。
是不是因为这个,我无法降序排序?
有什么方法可以实现吗?
控制器功能
public function index()
{
//Listing Students
$this->paginate = [
'finder' => 'ListStudents',
'sortWhitelist' => ['Students.id',
'Students.userName',
'Students.age',
'Students.currentClass',
'Students.dateJoined',],
'limit' => 25,
];
$students = $this->paginate($this->Students);
$this->set(compact('students'));
$this->set('_serialize', ['students']);
}
模型函数
public function findListStudents(Query $query, array $options)
{
$query
->select(['id','userName','age','currentClass','dateJoined'
])
$query->group('Students.id');
$query->order(['status' => 'asc']);
$query->order(['Students.dateJoined' => 'asc']);
$query->order(['Students.id' => 'asc']);
return $query;
}
link 中提到的问题与我面临的问题相似。我尝试了其中提到的解决方案,但它不起作用。
【问题讨论】:
-
您询问在自定义查找器中指定排序顺序是否可能是问题所在。看来你自己测试是一件非常微不足道的事情?
标签: sorting cakephp pagination cakephp-3.0 query-builder