エラーの詳細
例えばUser
モデルにdate
型のbirthday
というカラムがあるとする。
このbirthday
を
{{ $user->birthday->format('Y/m/d') }}
{{ $user->birthday->format('Y年m月d日') }}
上記のようにフォーマットを変更して表示する場合、User
モデルに
protected $dates = [
'birthday'
];
とすると**birthday
はCarbon
インスタンスとなるため、フォーマットを変更できる。**
しかし、フォーマットを変更して表示している場合birthday
がnull
だと下記のようなエラーになる。
Call to a member function format() on null
(nullなのにメンバー関数format()を呼び出しています)
エラーを回避するために下記のようなNull合体演算子を書いてみたが、それでもnull
の場合、同じエラーになる。
{{ $user->birthday->format('Y/m/d') ?? '登録なし' }}
これはのbirthday
のフォーマットを変更した上でnull
判定しようとしているのだが、フォーマットを変更するタイミングでbirthday
がnull
のため、やはり同じエラーが起こる。
解決策
birthday
のフォーマットを変更する前に条件分岐をすればいい。
// if文の場合
@if($user->birthday)
{{ $user->birthday->format('Y/m/d') }}
@else
登録なし
@endif
// 三項演算子の場合
{{ $user->birthday ? $user->birthday->format('Y/m/d') : '登録なし' }}
上記のようにすることで、birthday
がnull
でもエラーは起きなくなる。
ということでlaravelのdate
型カラムの取り扱いには要注意です。
(自戒の念を込めて。)