LoginSignup
39
46

More than 3 years have passed since last update.

Laravelで自前の配列をPaginatorに

Last updated at Posted at 2016-10-27

laravelで自前で用意した配列をページャー処理する方法

ちなみに、こちらのページは
Laravel Framework version 5.2.39
で記載されておりますので、バージョンが異なると挙動が違うかもしれません。あしからず。

自前の配列をページャーする方法

本題の自前配列

以下の2つのクラスを使うやり方があり、
- Paginator
- LengthAwarePaginator ← 個人的にはこちらがオススメ
です。

なぜ、LengthAwarePaginatorがオススメかというと
Paginator を作ったときの(デフォルトの)ページがあまり好きじゃないからですw

Paginator を使った場合

PlayerContorler.php
$players = new Paginator($list, $disp_limit, $page, array('path'=>'/player'));
パラメータ 内容
$list 自前の配列(array())※1
$disp_limit 1ページに表示する数
$page 現在のページ番号
array('path'=>'/player') オプションをarrayで指定※2

※1)配列は全てでは無い。そのページで表示する分の配列。
取り出しは「array_slice」等使って自分でなんとかしてください。
count(list)>disp_limit だと disp_limit 分までしか出ません。
(…ただなぜか disp_limit よりちょっと多めに list を入れておかないと「>>次」のページが出なかった・・・)
※2)最低限、前/次のページ行ったときのURL(path)だけ指定しておけばOK。
他のオプションは自分で調べてください。

テンプレートは割愛(→気になる人は最下部に記載しております)

出来上がりページイメージ

pager2.png

↑ページボタンがなんか好きくない!!
そこで・・・

LengthAwarePaginator を使った場合★本命★

PlayerContorler.php
use Illuminate\Pagination\LengthAwarePaginator;

$players = new LengthAwarePaginator($list , $all_num, $disp_limit, $page, array('path'=>'/player'));
パラメータ 内容
$list 自前の配列(array()) ※1
$all_num 自前配列数(総数)
$disp_limit 1ページに表示する数
$page 現在のページ番号
array('path'=>'/player') オプションをarrayで指定※2

※1)配列は全てでは無い。そのページで表示する分の配列。
取り出しは「array_slice」等使って自分でなんとかしてください。
count(list)>disp_limit だと disp_limit 分までしか出ません。
※2)最低限、前/次のページ行ったときのURL(path)だけ指定しておけばOK。
他のオプションは自分で調べてください。

テンプレートは同じく割愛(→気になる人は最下部に記載しております)

出来上がりページイメージ

pager1.png

DBのページャーと同じようなページを作りたければ
「LengthAwarePaginator 」を使うのがオススメ!

ちなみに・・・

DB(Model)の配列をページャーする方法【蛇足】

こちらはLaravelの公式等にもあるDB(Model)のページャを作る場合です。

PlayerContorler.php
$player_model = new Player();
$players = $player_model->where('user_status', '1')->orderBy('user_id', 'desc')->paginate(20);

return view('player.index', compact('players'));
index.blade.php
@if($players->count())
    <table class="table table-condensed table-striped">
        <tr>
        <th>ユーザID</th>
        <th>ユーザ名</th>
        <th>ステータス</th>
        </tr>
        @foreach($players as $player_item)
            <tr>
            <td>{{$player_item->user_id}}</td>
            <td>{{$player_item->user_name}}</td>
            <td>{{$player_item->user_status}}</td>
            </tr>
        @endforeach
    </table>
    {!! $players->appends([])->render() !!}
@endif

出来上がりページイメージ

pager1.png

39
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
46