【问题标题】:Laravel collection sortBy not taking effectLaravel 集合排序不生效
【发布时间】:2017-08-02 21:43:10
【问题描述】:

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

$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();

结果如下:

如您所见,它已正确组合结果,但它们仍保持原始查询顺序,未排序。

我也试过

$sortedEvents = $flattenedEvents->sortBy(function($event) {
    return (int) $event->mission_time;
});

【问题讨论】:

  • 如果项目是关联数组,这将起作用,将您的回调函数提供给sortBy 并尝试。 laravel.com/docs/5.4/collections#method-sortby
  • 我试过$sortedEvents = $flattenedEvents->sortBy(function($event) { return $event->mission_time; });,但结果相同
  • var_dump $event->mission_time 并检查类型
  • 我认为可能是这种情况,所以我尝试return (int) $event->mission_time,结果相同
  • 这对我来说似乎是正确的.. 我唯一能说的就是调试它.. 设置断点并深入了解sortBy 代码。别担心,它是 10 行的函数。没什么大不了的

标签: php laravel laravel-5 eloquent laravel-collection


【解决方案1】:

对我来说是一个巨大的失败,我漂亮的打印 JSON chrome 扩展程序弄乱了显示顺序,查看原始响应表明它们实际上已正确排序... ::facepalm::

【讨论】:

  • 我会平静地回到我的 AI 研究中去。但是,祝你找到它。
  • Lmao 这救了我...为什么要那样做!?
  • @Titan 真的,这就是问题所在?,为什么我遇到了完全相同的问题,我一直在努力让订单工作好几个小时,但我没有任何想法或建议?请
  • 我在使用 Postman 时遇到了同样的问题......漂亮的响应没有被订购,而 Raw 的响应是按照我想要的方式订购的!谢谢
  • 在这件事上把我的头发拉出来了!对于任何阅读的人来说,Chrome 的“JSON Formatter”都会这样做。谢谢!
【解决方案2】:

为了扩展@Titan 的答案,我猜扩展/邮递员维护数组索引顺序。不太确定。

摆脱它

return $collection->values();

这是一个例子

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

return $arr->sortByDesc('weight');

扩展仍然会保持索引顺序

return $arr->sortByDesc('weight')->values();

这将获得所需的顺序。

【讨论】:

  • 这应该被标记为正确答案!你救了我的一天老兄!
  • 就是这样!我来这里的第 10 次。现在它已经记住了,我保证!
猜你喜欢
  • 2020-01-04
  • 2017-06-06
  • 2019-06-21
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2017-10-05
  • 2015-08-23
相关资源
最近更新 更多