LaravelでGETパラメータがあるページでのページネーション

Laravel
スポンサーリンク


ページネーションの実装ってかなり手間ですが、Laravelだともの凄く簡単にできてしまいます。

PHPのフレームワークを使ったことがなかったので、ここまで簡単にページネーションを実装できることに驚きです。

他のフレームワークもこんな感じでできるのであれば、システム開発の時にフレームワークを使うことは工数削減にかなり影響を与えます。

スポンサーリンク

環境

今回の実行環境です。

OS:Ubuntu 20.04 LTS
PHP:8.0.13
Laravel:8.75.0
Composer:2.1.14

ページネーションの実装方法

まずはGETパラメータなしの場合のページネーションの実装方法です。

■Controller(コントローラー)
コントローラーでget()やall()で条件に合うレコードを全件取得していた箇所をpaginate(10)と変更します。
paginate()の引数は1ページに表示する件数です。

$users = User::paginate(10);

■View(ビュー)
ページネーションを追加するところに
{{$users->links()}}
を追加します。

@foreach ($users as $user)

{{$user->name}}

@endforeach {{$users->links()}}

GETパラメータがある場合の実装方法

検索画面で検索条件を引き回す場合だと先ほどのやり方ではうまくいきません。

例えばキーワード(keyword)を検索条件として検索した場合にURLが
http://localhost:8000?keyword=”ABC”
だったとします。

この場合に次ページのURLが
http://localhost:8000?keyword=”ABC”&page=2

とはならずに
http://localhost:8000?page=2

とGETパラメータであるkeywordが抜け落ちてしまうのです。

回避方法はビュー側の記述にappends()で引き回したいGETパラメータを追加するようにします。

■View(ビュー)

@foreach ($users as $user)

{{$user->name}}

@endforeach {{$users->appends(request()->query())->links()}}

これで無事にGETパラメータを引き回せるようになります。