Laravelでネストしたforeachでデータ毎(先頭以外)にカンマをつける

Laravel Bladeテンプレート上で@foreachを使う前提の話。

ここでやりたいのはデータごとにカンマをつけること。
改行だったりを入れたいとかもよくあること。
loop変数のfirstやlastを使って、先頭以外か最後以外につけるという手段を使う。
ネストしてなければシンプルである。

@foreach ($collection as $key => $value)
    @if (!$loop->first)
        ,
    @endif
    {{ $value->name }}
@endforeach

これだけでいい
1,2,3のような出力になる。

ネストしてる場合のデータごとのカンマを振るうえで問題がある。

@foreach ($collection as $key => $value)
    @foreach ($collection2 as $key2 => $value2)
        @if (!$loop->first)
            ,
        @endif
        {{ $value2->name }}
    @endforeach
@endforeach

これだとうまくいかない。
子foreach内で先頭以外にカンマをつける処理にした場合、
親foreachのloop回数をとらないと不具合が起こる。

@foreach ($collection as $key => $value)
    @foreach ($collection2 as $key2 => $value2)
        @if (!$loop->first || !$loop->parent->first)
            ,
        @endif
        {{ $value2->name }}
    @endforeach
@endforeach

!$loop->parent->firstで親のforeachのループ回数を見ている。
これでOK

管理ユーザー / 2018-10-17 / 88 / 0
このエントリーをはてなブックマークに追加

まだコメントがついていません。

ログイン不要でコメントの投稿ができます。