Да, но вам нужно объединить статус с сериями:
$movie = Movie::where('slug', $slug)->with([
'series' => function ($query) {
// Subquery on `series` table
return $query
// select whatever you'll need
->select('series.*')
// join with status
->join('status', 'series.status_id', '=', 'status.id')
// order by order number
->orderBy('status.order_number')
// * you can drop this if you select all the fields you need and use those
->with('status');
},
])->first();
Редактировать этот метод ^ будет сортировать на уровне SQL, но вы также можете сделать это с коллекциями:
@foreach ($movie->series->sortBy('status.order_number') as $series)
{{ $series->name}}
@endforeach
В этом случае также добавьте .status
к вашему with
, чтобы избежать проблемы n + 1: ->with(['series.status'])
Причина, по которой ваша попытка не сработала, заключается в том, что ->sortBy(..)
не изменяет коллекцию, она просто возвращает новую отсортированную.Это будет работать:
$movie->series = $movie->series->sortBy('status.order_number');