是否可以通过计算/虚拟/聚合col?
对Datalist / ComponentSet进行排序我有一个包含具有StartDate和EndDate的事件的DataList。 现在我想按事件的持续时间(最短到最长)对列表进行排序。
在SQL中我会这样做:
... ORDER BY DATEDIFF(EndDate, StartDate) ASC
如何使用silverstripe ORM
进行此操作$list = Event::get()->sort('????');
包含新的Field Duration并在onAfterWrite-hooks中填写此字段的附加列不是首选。
这可能吗?
罗伯特
答案 0 :(得分:6)
$list = Event::get()->sort(array('DATEDIFF("EndDate", "StartDate")' => 'ASC'));
DataList::sort
没有进行任何转义,因此任何有效的ORDER BY子句都可以正常工作。
答案 1 :(得分:2)
SELECT StartDate,EndDate,DATEDIFF(EndDate, StartDate) AS DiffDate FROM myTable ORDER BY DiffDate ASC
你可以在选择中计算这个差异以显示它和顺序,我使用' AS DiffDate'简化
答案 2 :(得分:1)
您可以像这样使用它:
SELECT *, DATEDIFF(EndDate, StartDate) as duration FROM table WHERE conditional = 1 ORDER BY duration ASC