我有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
请协助。
答案 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
排序。
见