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環境)
タグ検索