エラーの詳細
例えば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型カラムの取り扱いには要注意です。
(自戒の念を込めて。)