【发布时间】: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