按计算/聚合列对DataList进行排序

der*_*ert 3 php sorting datalist silverstripe

是否可以通过计算/虚拟/聚合col来对Datalist/ComponentSet进行排序?

我有一个DataList包含具有StartDate和EndDate的事件.现在我想按事件的持续时间(最短到最长)对列表进行排序.

在SQL中我会这样做:

... ORDER BY DATEDIFF(EndDate, StartDate) ASC
Run Code Online (Sandbox Code Playgroud)

如何使用silverstripe ORM做到这一点

$list = Event::get()->sort('????');
Run Code Online (Sandbox Code Playgroud)

包含新的字段持续时间并在onAfterWrite-hooks中填充此字段的附加列不是首选.

这可能吗 ?

罗伯特

小智 6

$list = Event::get()->sort(array('DATEDIFF("EndDate", "StartDate")' => 'ASC'));
Run Code Online (Sandbox Code Playgroud)

DataList::sort 不进行任何转义,因此任何有效的ORDER BY子句都可以正常工作.