通过CakePHP 2.x分页中的计算MySQL字段进行排序

时间:2016-02-05 13:10:19

标签: php mysql cakephp pagination cakephp-2.x

我有MySQL查询我需要的结果:

SELECT `delivery_date` FROM `order_grids` ORDER BY str_to_date(`delivery_date`, "%b %d, %Y") DESC

由于我们有自定义ORDER BY,所以我在CakePHP 2.x中实现它时遇到问题。

通常,在正常的字段排序的情况下,我们如下所示。我有一个VARCHAR类型字段delivery_date,它以[{1}}格式存储日期,需要对该列进行排序。

我已经拥有如上所示的MySQL查询:

Jan 21, 2015

请协助。

1 个答案:

答案 0 :(得分:2)

您可以通过创建虚拟字段来实现此目的。

  

由于虚拟字段在执行查找时的行为与常规字段非常相似,因此Controller::paginate()也可以按虚拟字段排序。

将以下内容添加到OrderGrid模型中:

public function __construct($id = false, $table = null, $ds = null) {
    parent::__construct($id, $table, $ds);
    $this->virtualFields['delivery_date_proper'] = sprintf('STR_TO_DATE(%s.delivery_date, "%%b %%d, %%Y") ', $this->alias);
}

这将允许您在分页时按delivery_date_proper排序。