Trying to get property 〇〇 of non-object と出たら、「オブジェクトがないのに、プロパティを参照しようとしているよ」という意味。
Trying to get property 〇〇 on null と出たら、「nullなのにプロパティを読み込もうとしているよ」という意味です。
手っ取り早く治す方法としては、表示しようとしているプロパティの後に【??”代わりの値”】を入れてあげることです。
例を使って、説明していきます。
こちらがエラーが起こったときのコードだとします。
1 |
{{$post->user->name}} |
次のようにコードを修正します。
1 |
{{$post->user->name??'匿名'}} |
コードの意味
postに紐づいたuserのnameを表示してね。
userのnameが空っぽのときには、【匿名】といれて。
すると、画面が表示されるようになります。
【画面例】
この方法は、NULL合体演算子というPHPの機能を使った方法になります。
なお、もし【匿名】といれず、空白にしておきたい場合には、下記のようにします。
1 |
{{$post->user->name??''}} |
こうすれば、??” の4文字でエラーが治ります。
データに値が入っていない可能性がある場合などに、使える解決法です。
エラーが解決したら嬉しいです。
なお、根本的な修正にはならないので、そのあたりはご注意を。
根本的に直すにはなぜnullになってしまうのかを探って、コードを修正する必要があります。
カラムを追加したり、テーブルの構造を変えた場合には、変更前のレコードを削除すると治ったりします。
Attempt to read property “name” on nullエラーについて
なお、ログインしていない状態で、navigation.blade.phpファイルが含まれたページを表示しようとすると、下記のようなエラーになります。
エラーの原因は、ログイン前の状態でログインユーザーの名前やメールアドレスを表示しようとしているためです。
こちらも上記と同じ方法で修正できますが、下記のように修正したほうが良いです。
【修正前】
1 |
<div> {{ Auth::user()->name }} </div> |
【修正後】
1 |
<div>@if(Auth::check()) {{ Auth::user()->name }} @endif</div> |
これによって、「もしユーザーがログインしていれば」という条件を追加することができます。
上記は名前ですが、メールアドレスを表示する箇所もあります。検索して修正してくださいね。
navigation.blade.phpファイルには、全部で3か所、上記のif文をいれたほうが良いコードがあります。