web-dev-qa-db-fra.com

Trouver la dernière itération de la boucle foreach dans laravel blade

Dans le modèle de lame, j'utilise la méthode last () pour trouver la dernière itération de la boucle foreach:

@foreach ($colors as $k => $v)
   <option value={!! $v->id !!} {{ $colors->last()->id==$v->id ? 'selected':'' }} > {!! $v->name !!} </option>
@endforeach

Est-ce que c'est bon? Peut-être existe-t-il une manière de Laravel de faire de même?

18
user947668

Quant à Laravel 5.3+, vous pouvez utiliser la variable $ loop

$loop->last

@foreach ($colors as $k => $v)
     @if($loop->last)
         // at last loop, code here
     @endif
@endforeach
65
Tom Kur

Ce que vous faites est tout à fait correct si vous souhaitez obtenir une instance du dernier élément de la collection.

De plus, dans Laravel 5.3 vous pouvez utiliser $loop variable, qui vous permet d'obtenir un booléen pour la dernière itération $loop->last ou pour obtenir l'index d'itération actuel $loop->iteration, nombre total d'enregistrements $loop->count et quelques autres La variable de boucle

@foreach ($posts as $post)

    {{ $post->title }} ({{ $loop->iteration }} of {{ $loop->count }})   

@endforeach
4
Sebastian Sulinski

si $colors est un Collection, $colors->last() et end($colors) les deux fonctionnent

3
cresjie
@foreach ($colors as $v)
    <option value={!! $v->id !!} {!!($v == end($colors)) ? 'selected="selected"' : '' !!} > {!! $v->name !!} </option>
@endforeach

ou

@foreach ($colors as $v)
    <option value={!! $v->id !!} {{($v == end($colors)) ? 'selected="selected"' : '' }} > {!! $v->name !!} </option>
@endforeach
2

Je ne sais pas si cette dernière méthode fonctionne mais sinon, essayez ceci:

@foreach ($colors as $v)
<option value={!! $v->id !!} @if($v == end($colors)) 'selected' @endif > {!! $v->name !!} </option>
@endforeach
1
bim