I got problem in Laravel Api collection paginate.
I have categories and I need to bring all products that belongs to a single category
My code:
JavaScript
x
public function show($id)
{
$category = Category::find($id);
if($category){
return new ProductCollection($category->products->paginate(10));
}
}
The code of paginate in AppServiceProvider
at boot
method
JavaScript
Collection::macro('paginate', function($perPage, $total = null, $page = null, $pageName = 'page') {
$page = $page ?: LengthAwarePaginator::resolveCurrentPage($pageName);
return new LengthAwarePaginator(
$this->forPage($page, $perPage),
$total ?: $this->count(),
$perPage,
$page,
[
'path' => LengthAwarePaginator::resolveCurrentPath(),
'pageName' => $pageName,
]
);
});
The result in first page is fine:
JavaScript
"data": [
{
"id": 6674,
"name": "test",
},
{
"id": 6668,
"name": "test2"
},
],
"links": {
"first": "http://example.test/api/auth/categories/2176?page=1",
"last": "http://example.test/api/auth/categories/2176?page=5",
"prev": null,
"next": "http://example.test/api/auth/categories/2176?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://example.test/api/auth/categories/2176",
"per_page": 10,
"to": 10,
"total": 43
}
The problem in the second page( the number key of the data( 10 , 11 ) before each product i need to remove it!
JavaScript
"data": {
"10": {
"id": 6613,
"name": "test3",
},
"11": {
"id": 6601,
"name": "test4",
},
},
"links": {
"first": "http://example.test/api/auth/categories/2176?page=1",
"last": "http://example.test/api/auth/categories/2176?page=5",
"prev": "http://example.test/api/auth/categories/2176?page=1",
"next": "http://example.test/api/auth/categories/2176?page=3"
},
"meta": {
"current_page": 2,
"from": 11,
"last_page": 5,
"path": "http://example.test/api/auth/categories/2176",
"per_page": 10,
"to": 20,
"total": 43
}
Advertisement
Answer
You can try pagination in eloquent resources, so instead of creating custom paginate, you can do like this:
JavaScript
return new ProductCollection($category->products()->paginate(10));