Laravelでビューに渡されたEloquentコレクションの中身が存在しているか判別するプログラムの書き方をまとめます。
データをビューへ渡す
まず、データを表示するためにEloquentでコレクションを取得してビューへ渡します。
public function index()
{
$users = User::all();
return view('users', ['users' => $users]);
}
単にデータを表示する
ビューに渡されたデータはループで表示できます。
<html>
<body>
<h1>User</h1>
@foreach($users as $user)
<p>{{ $user->name }}</p>
@endforeach
</body>
</html>
データの存在を判別する
データの存在を判別するには、isNotEmpty
メソッドを使います。
<html>
<body>
<h1>User</h1>
@if ($users->isNotEmpty())
<ul>
@foreach($users as $user)
<li>{{ $user->name }}</li>
@endforeach
</ul>
@else
Nothing Found
@endif
</body>
</html>
逆の動作である、isEmpty
メソッドを使うこともできます。
<html>
<body>
<h1>User</h1>
@if ($users->isEmpty())
Nothing Found
@else
<ul>
@foreach($users as $user)
<li>{{ $user->name }}</li>
@endforeach
</ul>
@endif
</body>
</html>
その他の判別方法
より単純なケースでは、@forelse()
が使えるかもしれません。
<html>
<body>
<h1>User</h1>
@forelse($users as $user)
<p>{{ $user->name }}</p>
@empty
Nothing Found
@endforelse
</body>
</html>
ちなみに、以下のような書き方では@empty()
がうまく判別できませんでした。
<html>
<body>
<h1>User</h1>
@foreach($users as $user)
<p>{{ $user->name }}</p>
@endforeach
@empty($users)
Nothing Found
@endempty
</body>
</html>
リレーションの存在の判定
リレーションの有無を調べるには、exists
メソッドとdoesntExist
メソッドが使用できます。
<html>
<body>
<h1>User</h1>
@if ($user->posts()->exists())
The user has some posts
@endif
@if ($user->posts()->doesntExist())
The user doesn't have any posts
@endif
</body>
</html>