Пагинация с коллекцией laravel в API - PullRequest
0 голосов
/ 15 апреля 2020

У меня проблема в Laravel Страница коллекции Api.

У меня есть категории, и мне нужно привести все продукты, относящиеся к одной категории

Мой код:

public function show($id)
{
    $category = Category::find($id);
    if($category){
        return  new ProductCollection($category->products->paginate(10));
    }
}

Код paginate в AppServiceProvider при boot метод

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,
            ]
        );
 });

Результат на первой странице в порядке:

"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
}

Проблема на второй странице ( Цифровой ключ данных (10, 11) перед каждым продуктом, мне нужно удалить его!

"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
}

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете попробовать разбиение на страницы в красноречивых ресурсах, поэтому вместо создания пользовательского разбиения на страницы вы можете сделать так:

return  new ProductCollection($category->products()->paginate(10));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...