Laravel集合sortBy没有生效

Tit*_*tan 10 php laravel eloquent laravel-5 laravel-collection

我正在尝试将来自多个数据库查询的结果进行组合和排序.

$events = collect();

$downedEvents = EventDowned::where('mission', $missionId)
   ->orderBy('mission_time', 'asc')
   ->get();

$events->push($downedEvents);

$getInOutEvents = EventGetInOut::where('mission', $missionId)
   ->orderBy('mission_time', 'asc')
   ->get();

$events->push($getInOutEvents);

$missileEvents = EventMissile::where('mission', $missionId)
   ->orderBy('mission_time', 'asc')
   ->get();

$events->push($missileEvents);

$flattenedEvents = $events->flatten();
$sortedEvents = $flattenedEvents->sortBy('mission_time');

return $sortedEvents->all();
Run Code Online (Sandbox Code Playgroud)

结果如下:

SS

正如您所看到的,它已正确组合结果,但它们仍保留在原始查询顺序中,而不是已排序.

我也试过了

$sortedEvents = $flattenedEvents->sortBy(function($event) {
    return (int) $event->mission_time;
});
Run Code Online (Sandbox Code Playgroud)

Tit*_*tan 13

一个巨大的失败,我的漂亮的打印JSON铬扩展正在弄乱显示顺序,查看原始响应显示他们实际上正确排序... :: facepalm ::

  • Lmao这救了我......为什么会那样做?! (4认同)
  • 我在邮递员中遇到了同样的问题...漂亮的回复没有命令,而原始回复则按照我想要的命令来了!谢谢 (2认同)

fay*_*ayz 9

为了扩展@Titan的答案,我想扩展名/邮递员将保持数组索引顺序。不太确定。

摆脱那个

return $collection->values();
Run Code Online (Sandbox Code Playgroud)

这是一个例子

$arr = collect([
  0 => [
      'name' => 'foo',
      'weight' => 70
  ],
  1 => [
      'name' => 'bar',
      'weight' => 80
  ]
 ]);

return $arr->sortByDesc('weight');
Run Code Online (Sandbox Code Playgroud)

该扩展名仍将保留索引顺序

return $arr->sortByDesc('weight')->values();
Run Code Online (Sandbox Code Playgroud)

这将获得所需的顺序。

  • 这应该标记为正确答案!你救了我的老兄! (2认同)
  • 这就对了!我已经第十次来这里了。现在它已经被记住了,我保证! (2认同)