使用分页时返回两个关系的数据时遇到问题。
$things = $this->model->with('fruits')->with('animals')->paginate(5, ['id, 'name']);
返回我想要的"东西",但"水果"和"动物"数组为空。
澄清一下,关系检查出来,事物"有很多"水果,也"有很多通过(水果("动物。
public function fruits()
{
return $this->hasMany('AppFruit');
}
public function animals()
{
return $this->hasManyThrough('AppAnimal', 'AppFruit');
}
我希望能够加载"事物">以及任何关系,同时能够对"事物"进行分页
with()
只告诉 Eloquent 预取相关模型,因此可以避免 N+1 查询问题。 这并不意味着当您返回模型时,也会返回该信息。
我会创建一个雄辩的资源:
Class FruitResource extends IlluminateHttpResourcesJsonResource {
public function toArray($request) {
return [
'id' => $this->id,
'name' => $this->name
];
}
}
Class AnimalResource extends IlluminateHttpResourcesJsonResource {
public function toArray($request) {
return [
'id' => $this->id,
'name' => $this->name
];
}
}
Class ThingResource extends IlluminateHttpResourcesJsonResource {
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);
通过构建资源,您可以轻松更好地控制返回的内容。 让生活更美好...