エラー内容
belongsToでboardsテーブルからpeopleテーブルのレコードを取り出したいときに、Trying to get property of non-objectというエラーが出て解決に時間がかかったので共有します。
対象のソース
Board.php
public function person()
{
return $this->belongsTo('App\Person');
}
public function getData()
{
return $this->id . ': ' . $this->title . ' (' . $this->person->name . ')';
}
これだとBoardクラスのgetDataメソッドの中の「$this->person」がnullで返る場合にTrying to get property of non-objectとなります。
解決策1
optional()メソッドを使う。
Board.php
public function getData()
{
return $this->id . ': ' . $this->title . ' (' . optional($this->person)->name . ')';
}
ヘルパー関数optional()は第二因数と共に利用し、第一因数(optionalの中)がNullの場合、第二因数を実行してくれます。
解決策2
連想配列にしても上手く行きました。
Board.php
public function getData()
{
return $this->id . ': ' . $this->title . ' (' . $this->person['name'] . ')';
}
参考文献
Laravel:Trying to get property of non-object エラー
##会社の紹介
私は現在、株式会社ダイアログという物流×ITの会社に勤務しております。
2020年11月現在、エンジニアの募集はしていませんが、他にも様々な職種を募集しているので、Wantedlyのページをご覧ください。