日常、いつもの考えや習慣で仮定してしまい、「実はそうでなかった」と後で冷や汗なること多々あります。Laravelのプログラミングもそうです。その過ちを繰り返さないために、出会ったらブログに書いていくことにします。

今回はCollectionに関して、最近うっかりしたこと。

例えば、tinkerで空の結果のEloquentのCollectionを作成して、

>>> $users = User::where('email', '=', '')->get(); // 空のCollection

=> Illuminate\Database\Eloquent\Collection {#2319
     all: [],
   } 

>>> if (empty($users)) echo "空です!"

empty()で空の判断を試みるが、「実はそうでなかった」。
empty()は引数が配列ならOKだけれど、Collectionのオブジェクトなら空を判断できません。

正しくは、Collectionのメソッド、isEmpty()を使います。

>>> if ($users->isEmpty()) echo "空です!"

空です!

同様に、count()でレコード数を数えてもOKですが、否定の!が必要。

>>> if (!$users->count()) echo "空です!"

空です!

また、配列を取り出すなら、empty()も使えます。

>>> if (empty($users->all())) echo "空です!"

空です!

By khino