NULL のはずなのに if 文が反応しない問題


目次

1.NULL のはずなのに if 文が反応しない
2.Collection には isEmpty()を使う

Laravelを使ったブログサイト作成中に気になったことがあったのでアウトプットとして書いてみます。

1. NULL のはずなのに if 文が反応しない

ブログ記事一覧ページで、
記事にサムネイルがある場合はそれを表示し、無い場合は no images の写真をサムネイルとして表示する。
という機能を実装させるため、下記のようなコードを blade に書きました。

@if($post->images !== null)
    @foreach ($post->images as $image)
        ...省略
    @break
    @endforeach
@else
        ...省略
@endif

しかし、全ての記事が null ではない方の処理がされてしまいました。
サムネイル無しで投稿したブログも全て、
@if($post->images !== null)の処理をされてしまい、
本来表示されるはずの no images の写真が表示されず空白になってしまいました。
emptyisset などに変えても同様の結果でした。

2. Collection には isEmpty() を使う

おかしいなと思い、デバッグで $post->images の中身を確認してみたところ、

object(Illuminate\Database\Eloquent\Collection)#1280 .... とのこと。

どうやら Collection が入っているため、普通の配列とは違うようです。
色々調べた結果、Collectionのメソッド、isEmpty() を使うのが正しいみたいです!

というわけで修正後がこちら!!

@if($post->images->isNotEmpty())
    @foreach ($post->images as $image)
        ...省略
    @break
    @endforeach
@else
        ...省略
@endif

これで正しく動いてくれました!

デバッグって優秀.....そして Collection についてもっと勉強しよう。
今日のアウトプットはこれで以上です!