2025.08.29
Laravelで空判定にif文を使うとハマる理由
2025.08.29
PHPLaravelで空判定にif文を使うとハマる理由
Laravelで開発していると、データベースから取得したデータが空かどうかを判定したい場面はよくありますよね。
例えば、レコードが存在すれば処理を実行し、なければ何もしないといったケースです。
先日それで詰まってしまったので記事にします。
// 例:データが取得できた場合のみ処理を実行したい
$items = $this->itemRepository->getItems($param); // getメソッド
if ($items) {
// データが存在する場合のみ処理を実行
}
このコード、一見すると問題なさそうに見えます。
しかし、実はこのif文の書き方だと、意図しない挙動を引き起こす可能性があります。
if ($variable)だけでは不十分なのかPHPのif文は、内部的に変数を真偽値(boolean)に変換して評価します。
このとき、以下のような値はfalseとみなされます。
・false
・null
・空の配列 []
・整数0
・空文字列 ""
一方、空ではないオブジェクトは、中身がなくてもtrueと評価されます。
ここに落とし穴があります。
Laravelのall()やget()メソッドは、結果が空の場合でもnullや空の配列を返すのではなく、空のCollectionオブジェクトを返します。
つまり、データが1件もなくても、if ($items)はtrueと評価されてしまうのです。
これが、データがないにもかかわらずif文の中の処理が実行されてしまう原因でした。
Collectionの専用メソッドを使うこの問題を解決するには、LaravelのCollectionクラスが提供する専用のメソッドを使いましょう。
データが空かどうかを判定するために、isEmpty()またはisNotEmpty()メソッドが用意されています。
$collection->isEmpty(): コレクションが空の場合にtrueを返します。
$collection->isNotEmpty(): コレクションが空ではない場合にtrueを返します。
先ほどのコードは、以下のように修正することで期待通りの動作になります。
// 修正後:CollectionのisNotEmpty()メソッドを使う
$items = $this->itemRepository->getItems($param); // getメソッド
if ($items->isNotEmpty()) {
// データが存在する場合のみ処理を実行
}
これで、データベースからデータが取得できた場合だけ、if文の中の処理が実行されるようになります。
・PHPのif文は、空のオブジェクトをtrueと評価する。
・Laravelのget()やall()メソッドは、結果がなくても空のCollectionオブジェクトを返す。
→if ($collection)は空でもtrueになる。
・Collectionが空かどうかを判定するには、isEmpty()またはisNotEmpty()メソッドを必ず使用する。
この小さな違いが、予期せぬバグを引き起こすことがあります。
LaravelのCollectionを扱う際は、ぜひisNotEmpty()メソッドを思い出すようにしてくださいね!
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
1
2025.08.29
Laravelで空判定にif文を使うとハマる理由
2

2025.08.29
Git SSH接続でfetch/pullができなくなった時の対処法
3

2025.08.28
【体験談】Amazon Linux 2でMySQLインストール時のOpenSSL・GPG key エラーにハマった話
4
2025.08.28
【AWS】SSMポートフォワーディングとInstance Connectを利用したプライベートEC2へのSSH接続手順
5
2025.07.24
Log::info()が使えない!?Laravel.logのPermission denied エラーを解決する(Docker環境)
タグ検索