【Laravel】Eloquentで返り値のcollectionに結果が0件だった場合の判定のベストな方法

Model::where(…)->get() から返されたEloquentコレクションが空かどうかを判定するベストな方法を教えます。

どうやら色々なやり方をしている人がいるみたいです。

※これは全部イマイチな例

$posts = Post::where(...)->get()
if (empty($posts)) { }
if (!$posts) { }
if ($posts) { }
if ($posts->first()) { } 
if ($posts->count()) { }
if (count($posts)) { }

empty() 使ってみたり、count()してみたりfirst()で値をとってみたり。

でもこれはあまり良くない。

正しくはどうすればいいのか。Collectionクラスが持っているメソッドを使いましょう。

一番簡単で正しいコードでもあります。

if($posts->isNotEmpty()) { }

collectionに値があればtrueが返ってきます。

Laravelの公式ドキュメントはこれ。https://laravel.com/api/9.x/Illuminate/Support/Collection.html#method_isNotEmpty

isNotEmpty はcollectionが空でないことを判定するCollectionクラスのメソッドです。

もし逆に空であることを判定したい場合は以下を使いましょう。

if($posts->isEmpty()) { }

こちらのメソッドの公式はこれhttps://laravel.com/api/9.x/Illuminate/Support/Collection.html#method_isEmpty

全般にいえることですが、こういうのはきちんとクラスが持っているメソッドを使うほうがバグを生みませんよ。

ちなみにリレーション先でも同じ感じです。詳しくは以下です。

【Laravel】関連(relation)のモデルが存在するかどうかをチェックする