BETA

laravel6.2¦同一画面に複数のページネーションが存在した時、独立した動作にする

投稿日:2020-06-12
最終更新:2020-06-12

やりたいこと

管理者とユーザーがいるシステムで、管理者ページでユーザー詳細を見たとき
予約一覧、振り込み履歴一覧…などが一気に表示されるページのとき、それぞれページネーションをつけても->paginate()のみだと片方を操作しても画面にあるページネーションすべてが動作してしまいます。これを別々に動作するように修正していきます。

環境
・laravel 6.2
・php 7.2

✈ 参考にさせていただきました! Laravel5で1ページに複数のPaginationを実装する

paginateに関して

💡paginateはIlluminate\Pagination\LengthAwarePaginatorインスタンスを呼び出し、このクラスには結果セット内のアイテムの総数をカウントするので、ページの数を記憶でき最後のページのインデックスを取得することができるようです。

💡simplePaginateはIlluminate\Pagination\Paginatorインスタンスを呼び出し、このクラスには最後のページのインデックスを取得するためのメソッドがないのでシンプルな実装になり「次へ」「前へ」のみの表示になるようです。

今回はpaginateを使用していきます👌

paginate() メソッドのパラメーターは↓のようになっていました。

// Illuminate/Database/Query/Builder.php  
public function paginate($perPage = 15, $columns = ['*'], $pageName = 'page', $page = null)  

実装!

コントローラーからmodelクラスを呼んであれやこれやして、変数につめてbladeに渡していきます。
まずはコントローラー(userInformationで各モデルクラス呼び出しゴニョゴニョをしています)
ふつうに変数にデータをつめてviewへ渡します。

public function show($userId)  
{  
    $user = $this->userInformation->getUserProfile($userId);  
    // ↓ページネーションつけたいのは以下ふたつ   
    $reservations = $this->userInformation->getUserReservations($userId);  
    $transferHistories = $this->userInformation->getUsertransferHistories($userId);  

    return view('manager.user_informations.show', compact('user', 'reservations', 'transferHistories'));  
}  

 
モデルクラスにpaginateを実装していきます。
$reservationsへの処理

public function findUserReservations(int $userId)  
{  
    return $this-> // ・・・いろいろな処理・・・  
                ->paginate(config('const.ReservationsPaginate'), ['*'], 'reservePage')  
                ->appends(['transferPage' => \Request::get('transferPage')]);  
}  

 
$transferHistoriesへの処理

public function findAlltransfer(int $userId)  
{  
    return $this-> // ・・・いろいろな処理・・・  
                ->paginate(config('const.UserTransferHistoriesPaginate'), ['*'], 'transferPage')  
                ->appends(['reservePage' => \Request::get('reservePage')]);  
}  

 
・個別にページネーションが動作する
・ページネーション時のパスが設定したtransferPagereservePageになる
上記の動作を、view側はいつも通りlinksを実装することで完成できました◎

{{ $reservations->links() }}  

appendsについて

ページネーションにパラメータを追加するのにクエリビルダで

->appends(['reservePage' => \Request::get('reservePage')]);  

としているのですが、Appending To Pagination Linksのことのようで
bladeファイルで設定しても同じ動作になることも一応確認できました。

{{ $transferHistories->appends(['reservePage' => \Request::get('reservePage')])->links() }}  

 

 
✡ ✡ ✡  

=͟͟͞͞( ˊᵕˋ )できた!

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

メモしていきますφ('ᴗ'」)

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう