Laravelで1ページ内に複数のpaginateを分けてページング方法

Laravelでpaginateを1つのページで複数設置すると、ページングするに際にすべてが同時にページングされてしまう。

以下のようにすると、paginateの第3引数に設定したパラメータでそれぞれでリクエストがなされる。

public function show(Request $request)
{
    $tags = Tag::paginate(10, ['*'], 'tags');
    $comments = Comments::paginate(10, ['*'], 'comments');

    return view('show.index', compact('tags','comments'));
}

/show?page=2だったものが、/show?tags=2/show?comments=2とで分けられて同時にページングがされなくなる。

ページングする際に、どちらのパラメータも残しつつページングを行いたい場合は、

以下のようにappendsを使うとよい。

public function show(Request $request)
{
    $tags = Tag::paginate(10, ['*'], 'tags')->appends(["comments" => $request->input('comments')]);
    $comments = Comments::paginate(10, ['*'], 'comments')->appends(["tags" => $request->input('tags')]);

    return view('show.index', compact('tags','comments'));
}

これで両方でページングを行なっても、/show?tags=2&comments=2となりそれぞれのページング状態が保持される。

コメント