LaravelEloquentで合計結果数を取得する方法
データベースクエリの結果を操作する場合、通常のクエリで完全なデータセットコンテンツを取得するのではなく、結果セットの行の総数のみを取得すると便利なことがよくあります。 Eloquentは、count()、max()、sum()など、Eloquentオブジェクトの代わりにスカラー数を返すいくつかの異なる集約メソッドを提供します。 これらはすべて、すべてのEloquentモデルに組み込まれている固有のクエリビルダーを介して利用可能になります。
シリーズのこのパートでは、メインアプリケーションビューを更新して、各リスト内のリンクの総数を表示します。
コードエディタでファイルresources/views/index.phpを開きます。
resources/views/index.php
subtitleクラスでスタイル設定された段落を見つけます。このクラスには、アプリケーションメニューをレンダリングするforeachループが含まれています。
...
<p class="subtitle">
@foreach ($lists as $list)<a href="{{ route('link-list', $list->slug) }}" title="{{ $list->title }}" class="tag is-info is-light">{{ $list->title }}</a> @endforeach
</p>
...
各リストのリンクの総数を取得するには、LinkListクラスで定義された$list->links()リレーションシップメソッド内からクエリビルダーにアクセスし、count()メソッドを呼び出します。クエリビルダーから利用できます。
{{ $list->links()->count() }}
foreachループ内のコードを更新して、count()メソッド呼び出しを含めます。これにより、リスト内のリンクの数が表示されます。 必ず<a>タグ内で、リストタイトルの直後に配置してください。 レンダリングされたHTML出力を読みやすくするために、この情報を括弧で囲むことができます。
終了すると、コードは次のようになります。
<p class="subtitle">
@foreach ($lists as $list)<a href="{{ route('link-list', $list->slug) }}" title="{{ $list->title }}" class="tag is-info is-light">{{ $list->title }} ({{ $list->links()->count() }})</a> @endforeach
</p>
終了したらファイルを保存します。 次に、ブラウザにメインアプリケーションページをリロードします。
http://localhost:8000
トップメニューに、各リストに含まれるリンクの総数を示す次のようなページが表示されます。
このシリーズの次のパートでは、クエリの結果の数を制限する方法と、LaravelEloquentで結果をページ分割する方法を学習します。