LaravelでJsonでレスポンスする場合のリレーションを含める方法は、Model(Eloquent)のtoArray()をオーバーライド

前提知識

  • コントローラーで単純にreturnした場合には、toJson()が自動で呼ばれる。
  • toJson()の内部でtoArray()が呼ばれる。
  • toArray()をオーバーライドしてそこで、リレーション先やアクセサなどのプロパティーを追加できる。

著者クラスがあったとして、booksのhasManyのリレーションと、年齢を返すageアクセサをtoJson()に含める例。

class Authoer extends Model{

    public function books(){
        return $this->hasMany(....)
    }

    public function getAgeAttribute(){
        return ....
    }

.............中略..................


    public function toArray()
    {
        return array_merge(parent::toArray(), [
            'books'=>$this->books,
            'age'=>$this->age
        ]);
    }   
    
}