(LARAVEL) Получить запись с разбитым на страницы списком записей из соответствующей таблицы (от 1 до многих) - PullRequest
2 голосов
/ 19 января 2020

Давайте рассмотрим простой пример: тег содержит множество вопросов (т.е. отношение 1 ко многим). Итак, я хотел получить запись тега вместе с разбитым на страницы списком записей сообщений внутри него.

Для этого я сделал следующее:

function getTagWithQuestions(Request $request, $tagId)
{
    // get tag
    $tag = Tag::find($tagId);
    // check if it exists or not
    if (!isset($tag->id)) {
        return response(['message' => 'Tag not found'], 404);
    }
    // get paginated list of questions
    $questions = Question::where(['tag_id' => $tag->id])->paginate();
    // assign questions to tag
    $tag->questions = QuestionResource::collection($questions);

    // return the contents
    return new TagResource($tag);
}

Нужный мне результат должен быть в следующем формате:

{
    "id": 1,
    "name": "javascript",
    "questions": {
        "current_page": 1,
        "data": [...(list of questions)],
        "first_page_url": "http://127.0.0.1:8000/uv1/tags/8?page=1",
        "from": 1,
        "last_page": 1,
        "last_page_url": "http://127.0.0.1:8000/uv1/tags/8?page=1",
        "next_page_url": null,
        "path": "http://127.0.0.1:8000/uv1/tags/8",
        "per_page": "15",
        "prev_page_url": null,
        "to": 5,
        "total": 5
    }
}

Но каким-то образом я получил в результате массив списков контактов без разбивки на страницы.

{
    "id": 1,
    "name": "javascript",
    "questions": [...(list of questions)]
}  

Есть ли способ получить такой же вывод (поскольку мне нужна мета нумерации страниц для добавления нумерации страниц)?

1 Ответ

1 голос
/ 19 января 2020

Преобразовать $questions в массив, структура будет такой, как вы хотите,

$questions = Question::where(['tag_id' => $tag->id])->paginate();
// assign questions to tag
$tag->questions = $questions->toAarray();

// return the contents
return new TagResource($tag);

Не забудьте не использовать with('questions'), или вам нужно назначить другую клавишу, например так:

$tag->questions_list = $questions->toAarray();
...