【问题标题】:Cakephp 3.3 sorting pagination results by multiple columnsCakephp 3.3 按多列排序分页结果
【发布时间】:2017-09-03 22:19:41
【问题描述】:

在 cakephp 3.3 中对分页结果进行排序时需要一些帮助 我想按多列排序,但如果我继续下一个(或任何其他页面),分页只考虑第一个。 是功能还是错误?

这是控制器中的分页命令:

$this->paginate = [
            'limit' => 20,
            'order' => [
                'Iktato.evszam' => 'DESC',
                'Iktato.iktatoszam' => 'DESC'
                ]
        ];

生成的查询:

SELECT 
  Iktato.id AS `Iktato__id`, 
  Iktato.iktatoszam AS `Iktato__iktatoszam`, 
  Iktato.evszam AS `Iktato__evszam`, 
  Iktato.datum AS `Iktato__datum`, 
  Iktato.honnan AS `Iktato__honnan`, 
  Iktato.felado AS `Iktato__felado`, 
  Iktato.cimzett AS `Iktato__cimzett`, 
  Iktato.targy AS `Iktato__targy`, 
  Iktato.tema AS `Iktato__tema`, 
  Iktato.iktatoszemely AS `Iktato__iktatoszemely`, 
  Iktato.megjegyzes AS `Iktato__megjegyzes`, 
  Iktato.allapot AS `Iktato__allapot`, 
  Iktato.user_id AS `Iktato__user_id` 
FROM 
  iktato Iktato 
ORDER BY 
  Iktato.evszam desc 
LIMIT 
  20 OFFSET 20

生成的分页链接只有一个排序参数。我们如何强制 Paginator 助手也考虑第二个参数?

【问题讨论】:

  • A mezőnevekből úgy tűnik, hogy magyar vagy :) Van egy CakePHP-s facebook csoportunk ha érdekel facebook.com/groups/cakehu
  • 科西! Jövökmáris!

标签: sorting cakephp pagination


【解决方案1】:

您可以使用自定义查找器来完成此操作。在模型的表类中:

public function findOrdered(Query $query, array $options)
{
    return $query
        ->order([
            'Iktato.evszam' => 'DESC',
            'Iktato.iktatoszam' => 'DESC'
        ]);
}

然后在你的控制器中:

$this->paginate = [
    'limit' => 20,
    'finder' => 'ordered',
];

这样,分页链接应该可以按预期工作,但如果您在视图中使用分页列排序($this->Paginator->sort('evszam') 等),您仍然会遇到问题。

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 2018-03-14
    • 2011-03-10
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2012-05-10
    相关资源
    最近更新 更多