与关系分页



使用分页时返回两个关系的数据时遇到问题。

$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);

通过构建资源,您可以轻松更好地控制返回的内容。 让生活更美好...

最新更新