web-dev-qa-db-fra.com

Laravel Blade Templating @foreach order

Existe-t-il un moyen de trier @foreach boucle dans laravel blade?

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

Je souhaite commander par $key->description,

Je sais que je peux utiliser la commande par dans mon contrôleur,

->orderBy('description')

mais le contrôleur renvoie d'autres valeurs et ces valeurs doivent également être triées, je dois donc les classer par lame.

15
Ugo Guazelli

En supposant que votre variable $ specialist est une collection Eloquent, vous pouvez faire:

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

De plus, vous pouvez appeler votre modèle Eloquent directement depuis le modèle:

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

Notez que vous utilisez un nom de variable trompeur de $ key dans votre boucle foreach (). Votre clé $ est en fait un élément du tableau, pas une clé. Je suppose que vous avez vu quelque part la syntaxe foreach ($ array as $ key => $ value), puis supprimé la valeur $?

29
Denis Mysenko

Je suggère d'utiliser un laravel collection . Plus précisément, le sortBy() . Vous pouvez utiliser l'un ou l'autre de ces éléments dans votre vue ou le contrôleur à partir duquel vous transmettez les données. Si les données sont transmises par un modèle, veillez à utiliser la fonction collect() avant de continuer à utiliser les autres répertoriées.

J'espère que cela t'aides!

1
Derek Pollard