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
全般にいえることですが、こういうのはきちんとクラスが持っているメソッドを使うほうがバグを生みませんよ。
ちなみにリレーション先でも同じ感じです。詳しくは以下です。