Laravel Blade Templating @foreach order

есть ли способ сортировки @foreach петля в лезвии laravel?

@foreach ($specialist as $key)
  <option value="{{$key->specialist_id}}"> {{$key->description}}</option>
@endforeach

Я wolud как по заказу $key->description,

Я знаю, что могу использовать order by в моем контроллере,

->orderBy('description')

но контроллер возвращает другие значения, и эти значения также должны быть отсортированы, поэтому мне нужно заказать в blade.

2 ответов


предполагая, что ваша переменная $specialist является красноречивой коллекцией, вы можете сделать:

@foreach ($specialist->sortBy('description') as $oneSpecialist)
  <option value="{{ $oneSpecialist->specialist_id }}"> {{ $oneSpecialist->description }}</option>
@endforeach

кроме того, вы можете вызвать свою красноречивую модель непосредственно из шаблона:

@foreach (Specialist::all()->sortBy('description') as $oneSpecialist)
  <option value="{{ $oneSpecialist->specialist_id }}"> {{ $oneSpecialist->description }}</option>
@endforeach

обратите внимание, что вы используете вводящее в заблуждение имя переменной $key в цикле foreach (). Ваш $key на самом деле является элементом массива, а не ключом. Я предполагаю, что вы где-то видели синтаксис foreach ($array as $key => $value), а затем удалили $value?


Я бы предложил использовать laravel коллекция. Более конкретно,sortBy(). Вы можете использовать любой из них в своем представлении или контроллере, с которого вы передаете данные. Если данные передаются моделью, обязательно используйте collect() функция перед переходом к использованию любых других перечисленных.

надеюсь, что это помогает!