【发布时间】:2021-03-08 19:47:09
【问题描述】:
我最近想通过使用它们的关系值对集合的父元素进行排序,所以我遇到了这样的事情并且它有效。你认为这是一个合适的方法还是我把它弄得太复杂了?
基本上,我想按日期对事件进行排序
事件与插槽是一对多的
对此的任何评论将不胜感激
干杯
$events = Event::with(['slots' => function ($q) {
$q->orderBy('date');
$q->orderBy('start_time');
}])->active()->get();
$slotArray = [];
foreach($events as $event){
foreach ($event->slots as $slot) {
$slotArray[$slot->id] = [ 'id' => $event->id, 'start_date' => $slot->date, 'start_time' => $slot->start_time];
}
}
//Sort the Array of IDS
usort($slotArray, array($this,"sortByStartDate"));
//Find the New Set of IDS sorted by the Start Date
$sortedEventIDs = [];
foreach($slotArray as $value) {
array_push($sortedEventIDs, $value['id']);
}
$sortedEvents = $events->sortBy(function($model) use ($sortedEventIDs){
return array_search($model->getKey(), $sortedEventIDs);
});
排序功能
function sortByStartDate($a, $b){
return $a['start_date'] > $b['start_date'];
}
【问题讨论】:
标签: php arrays laravel sorting collections