我有一组对象Person
,我想根据对象Score()
上的函数计算出的分数进行排序。
虽然我可以在ModelAdmin中轻松显示Score()
,但我无法按该字段排序,因为它不是数据库字段。分数基于数据库中的一些其他字段每天更改,因此它不适合存储自身。
我怀疑会有一个filterByCallback()
的等效函数,例如sortByCallback()
,但我似乎无法找到存在的函数。
我不需要在ModelAdmin gridField中添加它,但我想在报告中使用它。别人怎么解决这个问题?
干杯
答案 0 :(得分:2)
您始终可以使用本机PHP方法进行排序。例如
$list = Person::get()->toArray();
usort($list, function($a, $b){
// will sort in descending order. To reverse, swap $b and $a
return $b->Score() - $a->Score();
});
如果需要,您仍然可以转换为ArrayList
:
ArrayList::create($list);
正如UncleCheese在他的评论中指出的那样,这可能非常缓慢并且内存密集......这实际上取决于你计划排序的记录数量。