使用Laravel和Collection按日期DESC排序收集

时间:2018-11-24 17:38:23

标签: arrays laravel sorting collections

我有一个集合,我在其中按降序对“ total”值进行排序。当“总计”值相同时,我必须按降序对项目进行排序。

$collection->sortByDesc('total');

当总数相等时,要按降序对元素进行排序,我使用了sortsortByDesc,但元素仍未排序。

//First method
$collection->sortByDesc('created_at')->sortByDesc('total');

//Second method
$collection->->sort(function($a, $b){
   if($a->total === $b->total)
   {
      return strtotime($a->created_at) - strtotime($b->created_at);
   }
})->sortByDesc('total');

这两个选项都不适合我,但我仍然有相同的结果:

enter image description here

结果应为以下(当总值相等时,按下降日期排序的项目):

enter image description here

我在做什么错? Cheerz。

PS:因为“ total”值是应该优先考虑的值,所以它不能帮助我按“ total”排序,然后按“ date”排序。

1 个答案:

答案 0 :(得分:1)

sortByDesc将覆盖您在sort函数中所做的排序。

此外,strtotime($a->created_at) - strtotime($b->created_at)将按升序而不是降序对日期进行排序。

以下内容应为您提供帮助:

$collection->sort(function ($a, $b) {
    if ($a->total === $b->total) {
        return strtotime($a->created_at) < strtotime($b->created_at);
    }

    return $a->total < $b->total;
});

最后,假设created_atupdated_atCarbon实例,则不需要使用strtotime

$a->created_at < $b->created_at