こんにちは、Morimotoです。
ここ最近、Laravelでのシステム開発にちょこちょこ関わるようになり、動画教材などを活用して勉強しています。
動画などを見て理解した気になっていても、実際にコードを書こうとすると詰まってしまい、「どうすればよかったっけ?」となってまた調べる…というループに陥ることもあります。
なので、今回は「LarabelのCollectionオブジェクトが空かどうか判定する方法」を知識定着と自分への備忘録のために書いていこうと思います。
Collectionオブジェクトが空かどうか判定する方法
Collectionオブジェクトが空かどうか判定するにはいくつか方法があります。
今回はタスク管理アプリを例として、コントローラーで取得したデータが空かどうか判定していこうと思います。
判定する方法は下記の4つです。
- isEmpty()メソッドを使う方法
- isNotEmpty()メソッドを使う方法
- count()メソッドを使う方法
- toArray()で配列に変換して判定する方法
それぞれ確認していきましょう。
isEmpty()メソッドを使う方法
これが一番シンプルで分かりやすい方法です。
メソッド名の通り「空ですか?」と聞く方法だからです。
コントローラーでは下記のように使用できます。
// app/Http/Controllers/TaskController.php
public function index()
{
// 全てのタスクを取得
$tasks = Task::all();
// コレクションが空かどうかを判定
if ($tasks->isEmpty()) {
// タスクが一つもない場合の処理
return view('tasks.index', ['message' => 'タスクはまだありません。']);
}
// タスクがある場合の処理
return view('tasks.index', ['tasks' => $tasks]);
}
ここでは$tasks->isEmpty()
がtrue
を返した場合、つまりタスクが1件も存在しない場合にメッセージを返しています。
isNotEmpty()メソッドを使う方法
これはisEmpty()
メソッドと逆で「空ではありませんか?」と聞くメソッドです。
コントローラーでは下記のように使用されます。
// app/Http/Controllers/TaskController.php
public function index()
{
// 全てのタスクを取得
$tasks = Task::all();
// コレクションが空でないかを判定
if ($tasks->isNotEmpty()) {
// タスクが一件以上ある場合の処理
return view('tasks.index', ['tasks' => $tasks]);
}
// タスクが一つもない場合の処理
return view('tasks.index', ['message' => 'タスクはまだありません。']);
}
$tasks->isNotEmpty()
がtrue
を返した場合、つまりタスクが1件以上あった場合はビューファイルに$task
のデータを渡すようにしています。
count()メソッドを使う方法
これはCollectionオブジェクトの要素数を数えるcount()
メソッドを使用して、1件以上存在するかどうか判定する方法です。
PHPのcount()
関数と同じように使用できます。
// app/Http/Controllers/TaskController.php
public function index()
{
// 全てのタスクを取得
$tasks = Task::all();
// コレクションの要素数が1件以上あるかどうかを判定
if ($tasks->count() > 0) {
// タスクがある場合の処理
return view('tasks.index', ['tasks' => $tasks]);
}
// タスクが一つもない場合の処理
return view('tasks.index', ['message' => 'タスクはまだありません。']);
}
toArray()で配列に変換して判定する方法
これは、CollectionオブジェクトをtoArray()
メソッドを使用して通常のPHP配列に変換したうえで、PHPのempty()
関数で判定する方法です。
// app/Http/Controllers/TaskController.php
public function index()
{
// 全てのタスクを取得
$tasks = Task::all();
// コレクションを配列に変換
$tasksArray = $tasks->toArray();
// 配列が空かどうかを判定
if (empty($tasksArray)) {
// タスクが一つもない場合の処理
return view('tasks.index', ['message' => 'タスクはまだありません。']);
}
// タスクがある場合の処理
return view('tasks.index', ['tasks' => $tasks]);
}
この方法でも空かどうか判定は出来ますが、配列に変換するという余計な処理が発生するため出来ればisEmpty()
メソッドを使用するのが良いです。
まとめ
以上、Collectionオブジェクトが空かどうか判定する方法を4つご紹介しました。
メソッド名 | メリット | デメリット |
---|---|---|
isEmpty() | 可読性が高い、シンプル、効率的 | – |
isNotEmpty() | isEmpty() とほぼ同等、条件によって使い分ける | – |
count() > 0 | 直感的、要素数も同時に把握できる | isEmpty() より若干冗長 |
toArray() | 通常の配列として扱いたい場合に便利 | 余分な処理 |
色々と方法はありますがisEmpty()
メソッドが直感的に分かりやすく、シンプルなので良いかと思います。
ただ他の方法も知識として知っていれば、それぞれを適切な場面で使えるので、きちんとメリットやデメリットを理解しておくことが大切だと思いました。
Laravelを学習し始めたばかりの方は参考にしてみてください。一緒に頑張っていきましょう!
それでは。