Laravelで遭遇しやすいエラーの一つに、ErrorException : Trying to get property of non-objectがあります。
今回はErrorException : Trying to get property of non-objectが起こらないようにするための対策方法を紹介します。
optionalヘルパー関数
ErrorException : Trying to get property of non-objectが発生する状況とはどのようなものでしょうか?
LaravelでEloquentを使用していると、モデルのリレーションを頻繁に書く機会があります。
その際、アローでチェーンすることがありますが、下記の例ではcommentがnullの場合、プロパティが存在しないため、ErrorExceptionが発生します。
$user_id = $post->user->id;
こうした状況で発生するErrorExceptionの回避策として、ヘルパー関数のoptional()を使用することができます。
optional()は下記のように使用します。
$user_id = optional($post->user)->id;
$post->userがオブジェクトの場合はidを返却し、$post->userがオブジェクトでない場合、上記はnullを返却します。
optional()は第2引数にクロージャーを設定することが可能で、第1引数の結果がnullではない場合に、クロージャーの処理を実行します。
クロージャーの引数には第1引数の結果が渡されます。
$user = optional(Post::find($post_id), function ($post) {
return User::find($post->id);
});