如何通过函数结果对DataList进行排序 - SilverStripe 4

时间:2017-12-05 23:06:00

标签: sorting silverstripe silverstripe-4

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

虽然我可以在ModelAdmin中轻松显示Score(),但我无法按该字段排序,因为它不是数据库字段。分数基于数据库中的一些其他字段每天更改,因此它不适合存储自身。

我怀疑会有一个filterByCallback()的等效函数,例如sortByCallback(),但我似乎无法找到存在的函数。

我不需要在ModelAdmin gridField中添加它,但我想在报告中使用它。别人怎么解决这个问题?

干杯

1 个答案:

答案 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在他的评论中指出的那样,这可能非常缓慢并且内存密集......这实际上取决于你计划排序的记录数量。