Разбивка на страницы не работает при переносе данных с помощью функции costom json

#json #laravel #api #laravel-relations #laravel-resource

#json #laravel #API #laravel-отношения #laravel-ресурс

Вопрос:

Я извлекаю данные для разбивки на страницы, но разбивка на страницы не работает, ответ выборки добавляется ниже, если я возвращаю отношение запроса, оно извлекает правильные данные, но когда я передаю его пользовательской функции ответа, он извлекает только данные, но не ссылки на разбивку на страницы

 try {
            $type = 'success';
            $status_code = 200;
            $message = 'Posts data listed.';
            $response = PostResource::collection(Post::with(['associate:id,name,avatar', 'comments:id,commenter_id,commentable_id,comment,created_at'])
                ->latest('posts.created_at')
                ->paginate(2));
        } catch (Exception $e) {
            $type = 'error';
            $status_code = $e->getCode();
            $message = $e->getMessage();
            $response = false;
        }
        return response_data($type, $status_code, $message, $response);
 

Вот мой код функции response_data

 function response_data($type, $status, $message = false, $response)
{
    return response()->json(['type' => $type, 'status' => $status, 'message' => $message, 'response' => $response]);
}
 

но если вернуть запрос напрямую, он извлекает данные с разбивкой
на страницы, вот мой ответ, полученный коллекцией

 {
    "type": "success",
    "status": 200,
    "message": "Posts data listed.",
    "response": [
        {
            "id": 32,
            "associate_id": 5,
            "title": "Test Title",
            "content": "Post descriptuoin",
            "image": "https://oppazz.oppazzgiftcode.com/images/posts/1632472717.Laravel.png",
            "created_at": "2 months ago",
            "associate": {
                "name": "Code Logic Technologies Pvt. Ltd.",
                "avatar": "https://oppazz.oppazzgiftcode.com/images/associates/1633002782_logo.png"
            },
            "comments": [
                {
                    "id": 13,
                    "commenter_id": "62",
                    "commentable_id": "32",
                    "comment": "Nice offer",
                    "created_at": "2 months ago",
                    "user": {
                        "id": 62,
                        "name": "Rikesh Shakya",
                        "username": "rikesh-shakya",
                        "mobile_number": "9823783191",
                        "email": "skybks5@gmail.com",
                        "provider_id": null,
                        "avatar": "https://oppazz.oppazzgiftcode.com/images/logo.png",
                        "email_verified_at": null,
                        "status": "Y",
                        "created_at": "2021-06-11T18:05:07.000000Z",
                        "updated_at": "2021-06-11T18:05:07.000000Z",
                        "created_by": null,
                        "updated_by": null,
                        "device_type": null
                    }
                },
                {
                    "id": 16,
                    "commenter_id": "88",
                    "commentable_id": "32",
                    "comment": "tetetete",
                    "created_at": "2 months ago",
                    "user": {
                        "id": 88,
                        "name": "Neelam Kera",
                        "username": "neelam-ranjitkar",
                        "mobile_number": "9860322060",
                        "email": "shresthaneelam19@gmail.com",
                        "provider_id": null,
                        "avatar": "https://oppazz.oppazzgiftcode.com/images/logo.png",
                        "email_verified_at": null,
                        "status": "Y",
                        "created_at": "2021-07-15T14:08:21.000000Z",
                        "updated_at": "2021-07-15T14:08:21.000000Z",
                        "created_by": null,
                        "updated_by": null,
                        "device_type": null
                    }
                }
            ],
            "associate_social_sites": {
                "id": 5,
                "associate_id": 5,
                "facebook": "https://www.fachook.com",
                "instagram": "https://www.instagram.com",
                "twitter": "https://www.twitter.com",
                "status": "Y",
                "created_at": null,
                "updated_at": "2021-09-24T09:29:57.000000Z",
                "created_by": null,
                "updated_by": null,
                "device_type": null
            }
        },
        {
            "id": 31,
            "associate_id": 9,
            "title": "OppazZ Coffee For Happiness (Giveaway series)",
            "content": "OppazZ",
            "image": "https://oppazz.oppazzgiftcode.com/images/posts/1632367205.kamloops-art-page-2.jpg",
            "created_at": "2 months ago",
            "associate": {
                "name": "OppazZ",
                "avatar": "https://oppazz.oppazzgiftcode.com/images/associates/1622551849_184399208_2242958835839866_1824735327179728878_n.jpg"
            },
            "comments": [],
            "associate_social_sites": null
        }
    ]
}
 

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

Комментарии:

1. Определите, как это не работает?

2. извлекаются только данные, но ссылки на разбивку на страницы не отображаются.

3. какую версию laravel вы используете?

4. я использую laravel версии 8

5. Поскольку вы используете метод PostResource::collection, с его помощью вы изменяете (изменяете) фактические данные. поэтому, если вы удалите его или измените класс PostResource, чтобы возвращать также те метаданные, которые вам нужны.

Ответ №1:

Классы результатов Laravel paginator реализуют IlluminateContractsSupportJsonable контракт интерфейса и предоставляют toJson метод, поэтому очень легко преобразовать результаты разбивки на страницы в JSON.

Вы также можете преобразовать экземпляр paginator в JSON, просто вернув его из действия маршрута или контроллера:

https://laravel.com/docs/5.3/pagination#converting-results-to-json