with()
только указывает Eloquent на предварительную выборку связанных моделей, поэтому вы можете избежать проблемы запроса N + 1.Это не означает, что когда вы возвращаете модель, эта информация также возвращается.
Я бы создал Eloquent Resource:
Class FruitResource extends \Illuminate\Http\Resources\Json\Resource {
public function toArray($request) {
return [
'id' => $this->id,
'name' => $this->name
];
}
}
Class AnimalResource extends \Illuminate\Http\Resources\Json\Resource {
public function toArray($request) {
return [
'id' => $this->id,
'name' => $this->name
];
}
}
Class ThingResource extends \Illuminate\Http\Resources\Json\Resource {
public function toArray($request) {
return [
'id' => $this->id,
'fruits' => FruitResource::collection($this->fruits),
'animals' => AnimalResource::collection($this->animals)
];
}
}
Как только вы создали эти ресурсы, вы можете изменить свой контроллерсделать следующее:
$things = $this->model->with('fruits')->with('animals')->paginate(5, ['id, 'name']);
return ThingsResource::make($things);
Структурируя свои ресурсы, вы легко сможете получить больший контроль над тем, что вы возвращаете.Сделай жизнь намного лучше ...