#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