laravelで1ページに2つ(複数)のページネーションを入れる方法

製作 プログラム

最終更新日:2022/04/30

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

ゴールデンウィークも夜はお酒飲みながらlaravelでポチポチ遊んでるんですが、今回一つのページに2つ(もしくはそれ以上の複数個)のページネーションを入れる画面を作りたいなーと思い調べた結果を書いておきます。

laravel公式サイト(Laravel 8.x Database:ペジネーション)にバッチリ乗ってるんでそっち読んでもらう方がいいんですが、参考にしてみてください。

1ページに2つ(複数)のページネーション実装方法

変更するのはControllerの部分。paginate(10)とか呼び出してる所を変更するだけ。今回2つのページネーションを1ページに入れるわけなので、Controllerにもpaginate()を呼び出している場所が2か所あるハズです。そのうち一つだけを以下のように変えます(複数ある場合は最初の1個だけそのままで残りのpaginateを全部変えてください)。

変更前:

$models = ModelName::paginate(10);

変更後:

$models = ModelName::paginate( $perPage = 10, $columns = [‘*’], $pageName = ‘page2’ );

これだけでOK。

第2引数の「$columns」の説明がlaravel公式サイトにも全く書いてなかったんでよくわからないんですが、どうやらデータベースでselectするときのどのカラムを数えるか(?)みたいな部分みたいです。ためしに「*」を「test」とか適当な文字にしてみるとエラーで、そんなカラムないよ!って怒られました。「id」でも普通に動いたんで、第2引数の「$columns」は別に「*」じゃなくてもいいんだと思います。

と、話がずれましたが第3引数の「page2」っていうのがキモ。

別にpage2でなくてもOKで、好きな文字列で。

laravelではページネーション有効時、また2ページ目以降の場合、URL末尾に「&page=2」みたいなのが追加されます。

んで1つのページに2つ(複数)のページネーションを入れるとき何がマズいかっていうと、この「&page=2」が両方共のページネーションのページ番号になっちゃうから、片方のページを進めるともう片方のページも進んじゃうんです。

これじゃよくない、ってことで第3引数で2つ目のページネーションは「&page」じゃなくて「&page2」っていうので処理してね!って指示してます。

laravel公式サイトのようにこの第3引数を「users」にすれば「&users=2」とかみたいにURLに追加されるようになります。

まとめ

今回はlaravelで1つのページに2つ(もしくはそれ以上の複数個)のページネーションを入れるときの入れ方を紹介しました。

まとめると変更するのはControllerのpaginate()の部分だけでOKで、その第3引数で「page2」みたいなのを設定して上げるだけ。すごく簡単なんでぜひ試してみてください。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /