Laravel Blade foreachループの初回、最終回を判定する

こんにちは。今回はLaravelのBladeでforeachループの初回、最終回を判定する方法を解説します。ループの初回最終回判定は、自前で作ろうとすると制御用のカウンターが必要になり、コードが汚くなりがちですよね。Laravelでは便利な構文が用意されているので活用したほうが良いです。それでは見ていきましょう。

書き方

判定するためにはループに関する情報を取得できる「ループ変数」というものを使用します。コードではforeachディレクティブの中で$loopで参照できます。初回、最終回はそれぞれ以下のように取得します。

  • $loop->first 初回
  • $loop->last 最終回

実際に書くときは以下のようにします。

@foreach ($items as $item)
    @if ($loop->first)
        初回
    @endif

    @if ($loop->last)
        最終回
    @endif
@endforeach

活用事例

実際の活用事例をサンプルコードを用いて説明します。今回は商品の売上一覧の最終行に合計行を挿入する事例を作ります。作成結果は次のようになります。

コードは次のようになります。

    @php
        $sales = [
            ['ItemA', 1000],
            ['ItemB', 2000],
            ['ItemB', 1000],
        ];
        $total = 0;
    @endphp

    <table border="1">
        <tr>
            <th>商品名</th>
            <th>金額</th>
        </tr>
        @foreach ($sales as $item) 
        <tr>
            <td>{{ $item[0] }}</td>
            <td>{{ $item[1] }}</td>
        </tr>
        @php
        $total += $item[1];
        @endphp

        @if ($loop->last)
        {{-- 最後の処理で合計行を生成 --}}
        <tr>
            <td>
                合計
            </td>
            <td>
                {{ $total }}
            </td>
        </tr>
        @endif
        @endforeach
    </table>

まとめ

今回はforeachループの初回、最終回を判定する機能を紹介しました。Laravelはループ変数に初回、最終回情報を保持しているので、それを参照すればシンプルに記述することができます。

ループの初回、最終回判定は自前で作ると制御用の変数が多くなり、コードの可読性を落としてしまいます。不具合も多くなります。このような機能は地味にありがたい機能なので活用しましょう。

Laravel

Posted by kobainmac