php - 如何在资源集合中获取分页链接 - Laravel 5.7.19
问题描述
我正在使用 laravel API 资源。当我们不使用任何资源集合时,我们会使用 paginate(10) 获得分页链接等。但是当我使用 Resource::collection 时,我什么也得不到,只有我放入资源的字段。
这是我的控制器
return response()->json([
"items" => LatestProjectsResource::collection(Project::has('pages')->where('type', $type)->latest()->paginate(20))
]);
这是我的资源
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->name,
'slug' => $this->slug,
'url' => $this->url,
'thumbnail' => new ThumbnailResource($this->thumbnail),
];
}
结果
我尝试了一些来自在线社区的答案,包括这个Customizing Laravel 5.5 Api Resource Collection pagination one 但它不起作用
我试过$this->collection
但没有运气
请帮帮我。
解决方案
我通过覆盖常规资源类的collection
方法解决了这个问题。
public static function collection($data)
{
/* is_a() makes sure that you don't just match AbstractPaginator
* instances but also match anything that extends that class.
*/
if (is_a($data, \Illuminate\Pagination\AbstractPaginator::class)) {
$data->setCollection(
$data->getCollection()->map(function ($listing) {
return new static($listing);
})
);
return $data;
}
return parent::collection($data);
}
这只是检查给定数据是否是 Laravel 分页器类的实例,如果是,它只是修改底层集合并返回相同的分页器实例。您可以将其放在抽象集合类或每个资源类中。
推荐阅读
- firebase - 具有特定 uid 的 Firebase 函数 Typescript initializeAdmin()
- javascript - 更改水平滚动条的宽度。自定义滚动条?
- java - 给定 base 和 n 都为 1 或更大,递归(无循环)计算 base 的 n 次方的值,因此 powerN(3, 2) 为 9(3 的平方)。在java中
- mysql - 在插入时禁用 innodb_log_file 写入,AWS
- javascript - D3 奇怪地附加 tbody 每隔一个渲染
- google-maps - InfoWindow“在 Google 地图上查看”链接
- aws-lambda - 使用 Amplify 为 AppSync 自动化 Lambda 解析器?
- go - 将在所有其他处理程序之前运行的中间件
- swift - 来自 URL NSString 的数据作为 NSInteger 代替
- php - 使用 PHP 的 Curl API 调用