CommentsCollection
class CommentsCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection
];
}
}
CommentsController
public function index()
{
$post = Post::find(1);
return ['post'=> $post, 'comments' => new CommentsCollection(Comment::paginate(1))];
}
响应
"comments": {
"data": [
{
"id": 1,
"content": "First comment",
"post_id": 6,
"account_id": 1,
"created_at": "2018-03-07 02:50:33",
"updated_at": "2018-03-07 02:50:34"
}
]
}
当使用::collection
方法甚至ResourceCollection的资源作为数组的一部分返回时,会发生这种情况。
如果我们要删除数组并返回纯集合:
return new CommentsCollection(Comment::paginate(1))
一切都会正常运作,响应将包括元和链接。
为什么API资源(使用collection
方法或ResourceCollection)在数组中返回时不包含分页信息?
答案 0 :(得分:2)
我遇到此问题并找到了解决方案,请检查以下链接以获取解决方案的详细说明
简而言之,请检查以下解决该问题的代码段
$data = SampleModel::paginate(10);
return ['key' => SampleModelResource::collection($data)->response()->getData(true)];
答案 1 :(得分:1)
我注意到资源收集的结果必须单独返回才能正常工作
return ItemMiniResource::collection(
$items->paginate(10)
);
它完美无缺,但
$data['items'] = ItemMiniResource::collection(
$items->paginate(10)
);
return $data
不包含分页链接
答案 2 :(得分:0)
我已在本地检查过,是的,你是对的,它不会返回元和链接。所以我有一个有效的解决方案。创建一个Post资源。并为您的帖子提供资源控制器。然后在您需要评论的单个帖子api上,只需明确地返回您的评论。
class PostsResource extends Resource
{
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'body' => $this->body,
'comments' => Comment::paginate(5)
];
}
}
所以显示的控制器代码意味着单个帖子将是这样的:
public function show($id)
{
return new PostsResource(Post::find($id));
}
答案 3 :(得分:0)
您需要set
pagination link
:
public function toArray($request)
{
return [
'data' => $this->collection,
'links' => [
'self' => 'link-value',
],
];
}