我有一个字段(单选按钮)来选择一个世纪。
因此,当我在视图中显示我的字段列表时,我可以对列进行排序(ASC或DESC),但罗马数字是带有这些选项的字符串:
(XVI, XVII, XVIII, XIX, XX, XXI)
有没有办法告诉paginator使用自定义usort
函数,只是为了那个列?
我已经有了一个转换和排序罗马的函数,但是如何在视图中使用它和paginator sort函数?
CakePHP 2.x。
答案 0 :(得分:2)
您必须在数据库级别进行排序,因此usort()
无法提供帮助。
可能的解决方案是执行以下操作:
创建一个MySQL 用户定义函数,将罗马数字转换为阿拉伯数字。以下问题提供了一些内容:
创建一个虚拟字段,使用此函数以数字格式返回世纪:
public function __construct($id = false, $table = null, $ds = null) {
parent::__construct($id, $table, $ds);
$this->virtualFields['century_number'] = sprintf('convert_to_number(%s.century))', $this->alias);
}
使用此虚拟字段对您的分页中的结果进行排序。 CakePHP可以处理这个问题,如Cookbook 2.x中所述:Pagination and virtual fields。
虽然上述方法有效,但如果将数百年的数据存储在数字字段类型(或日期)中,也许会使事情变得更容易。在视图中可以轻松转换为罗马数字。