Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel Blade Templating @foreach order

Is there any way to sort @foreach loop in laravel blade?

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

I wolud like to order by $key->description,

I know I can use order by in my controller,

->orderBy('description')

but the controller returns other values and those values must be sorted as well, so I need to order by in blade.

like image 629
Ugo Guazelli Avatar asked Jan 10 '16 00:01

Ugo Guazelli


2 Answers

Assuming that your $specialist variable is an Eloquent collection, you can do:

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

Moreover, you could call your Eloquent model directly from the template:

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

Note that you are using a misleading variable name of $key in your foreach() loop. Your $key is actually an array item, not a key. I assume that you saw foreach ($array as $key => $value) syntax somewhere and then removed the $value?

like image 177
Denis Mysenko Avatar answered Oct 22 '22 04:10

Denis Mysenko


I would suggest using a laravel collection. More specifically, the sortBy(). You can use either of these in your view or the controller that you are passing the data from. If the data is being passed by a model, be sure to use the collect() function before proceeding to use any of the others listed.

Hope this helps!

like image 45
Derek Pollard Avatar answered Oct 22 '22 04:10

Derek Pollard