使用分页时,我在返回两个关系的数据时遇到问题。
$things = $this->model->with('fruits')->with('animals')->paginate(5, ['id, 'name']);
返回我想要的“事物”,但是“水果”和“动物”数组为空。
为弄清关系,我们检查出事物“有很多”的果实,并且“有很多通过(水果)的”动物。
public function fruits()
{
return $this->hasMany('App\Fruit');
}
public function animals()
{
return $this->hasManyThrough('\App\Animal', '\App\Fruit');
}
我希望能够加载“事物”以及任何关系,同时能够对“事物”进行分页
答案 0 :(得分:0)
with()
仅告诉Eloquent预取相关模型,因此可以避免N + 1查询问题。这并不意味着当您返回模型时,也会返回该信息。
我将创建一个雄辩的资源:
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);
通过构造资源,您可以轻松地获得对返回内容的更多控制。让生活变得更加美好...