• Home
  • Laravelで複数のページネーションを活用するテクニック

Laravelで複数のページネーションを活用するテクニック

記事のサムネイル

みなさんこんにちは!

今回は Laravel で複数のページネーションを活用する場合の実装について記事を書こうと思います。

もし、Laravel のページネーションを同じ画面で複数回利用したい場合には、ちょっとしたポイントが必要です。
ドキュメントに載っているページネーションの実装をそのまま複数実装すると、異なるページネーションのリストが同時にページ遷移してしまうことがあります。

例えば、以下のようなコードを考えてみましょう。

// コントローラー
public function index()
{
   $users = DB::table('users')->paginate(5);
   $items = DB::table('items')->paginate(5);

   $hash = array(
         'users' => $users,
         'items' => $items
   );

   return view('user/index')->with($hash);
}

このままでは、ページ遷移時には user/index?page=2 というリクエストが送られ、両方のリストが同じページ番号を参照してしまいます。

そこで、各ページネーションに異なるパラメータ名を設定することをおすすめします。

// コントローラー
public function index()
{
   $users = DB::table('users')->paginate(5, ["*"], 'user-page');
   $items = DB::table('items')->paginate(5, ["*"], 'item-page');

   $hash = array(
         'users' => $users,
         'items' => $items
   );

   return view('user/index')->with($hash);
}

これにより、ページ遷移時には例えば user/index?user-page=2user/index?item-page=2 のように、異なるパラメータが使用されるようになります。

ただし、ここで新たな課題が浮かび上がります。片方のリストでページ遷移すると、もう片方のリストが最初のページに戻ってしまう問題です。これは、ページ遷移時に片方のパラメータがリセットされるためです。

この問題を解消するためには、各ページネーションで他方のリストのパラメータも保持する必要があります。これには appends メソッドを使用します。

最終的なコードは以下の通りです。

// コントローラー
public function index(Request $request)
{
   $users = DB::table('users')->paginate(5, ["*"], 'user-page')
                         ->appends(["item-page" => $request->input('item-page')]);

   $items = DB::table('items')->paginate(5, ["*"], 'item-page')
                        ->appends(["user-page" => $request->input('user-page')]);

   $hash = array(
         'users' => $users,
         'items' => $items
   );

   return view('user/index')->with($hash);
}

これにより、例えば user/index?user-page=2&item-page=3 のように、各リストが独立してページ遷移できるようになります。

実装やエラーが解決できない場合

プログラミングの実装やエラーでどうしてもわからない場合はメンターに相談するのが一番です。

考えている、見えている範囲が狭くなり、解決から遠くに行って何時間も、何日も経っていることなんてよくある話です。

そういう時は聞ける先輩や、メンターに相談することが大事です。

僕にも相談可能なので気軽に相談してください。

ご相談はこちら
(Twitterのプロフィールへ飛びます)

OTHER ARTICLES

  • Web制作

  • Rails

railsでjsではなくrubyでtooltipの単位を設定するときの話

2024/08/20
  • Web制作

  • Rails

Railsにおけるクラスメソッドとインスタンスメソッドの違いについて

2024/05/30
  • Web制作

  • Docker

  • Rails

DockerでRails7 + PostgreSQL + esbuildの環境を構築する方法

2024/05/16
  • Web制作

  • Rails

  • Docker

Dockerで建てたrails7環境で「undefined method `devise' for 〜」が発生した話

2024/05/16
  • Web制作

  • Rails

Ruby on RailsのルーティングとRESTfulルート

2024/05/09
  • Web制作

  • Rails

Ruby on Railsにおけるresourceとresourcesの違い

2024/05/01
管理者のイメージ画像

PROFILE

Youta

山口県出身の現役のWebエンジニアです。仕事を通して学んだことや、生活していく中で学んだことを発信していきます。

CATEGORY