1

我有一组对象Person,我想根据对象上的函数计算的分数对其进行排序Score()

虽然我可以轻松地Score()在 ModelAdmin 中显示,但我无法按该字段排序,因为它不是 db 字段。分数每天都会根据数据库中的其他一些字段而变化,因此它不适合存储自己。

我怀疑会有一个与诸如此类的功能等效的功能,filterByCallback()sortByCallback()我似乎找不到该功能。

我不需要将它添加到 ModelAdmin gridField 中,但我想在报告中使用它。其他人是如何解决这个问题的?

干杯

4

1 回答 1

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 在他的评论中指出的那样,这可能会非常缓慢且占用大量内存……这实际上取决于您计划对多少记录进行排序。

于 2017-12-06T09:04:02.850 回答