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
]);
}
}