概要
LaravelではEloquentでpaginateメソッドを用いることでページネーションをすることができるが、 自身で用意した配列(コレクション)を利用してページネーションを行う方法を調べたのをまとめようと思う。
環境
- Laravel 9
方法
コレクションでページネーションをするためにはLengthAwarePaginatorを使用する。
use Illuminate\Pagination\Paginator; use Illuminate\Pagination\LengthAwarePaginator; // 配列からコレクションへ変換 $collection = collect($array_data); // 1ページごとの表示件数 $perPage = 6; // 現在のページを取得 $page = Paginator::resolveCurrentPage('page'); // ページ番号から表示するデータを指定 $pageData = $collection->slice(($page - 1) * $perPage, $perPage); $options = [ 'path' => Paginator::resolveCurrentPath(), 'pageName' => 'page' ]; $paginatedData = new LengthAwarePaginator($pageData, $collection->count(), $perPage, $page, $options);
実行テスト
仮のコレクションデータを用意
$collection = collect(Post::all());
通常のpaginateで取得する場合と比較
dd(Post::paginate(6), $paginatedData);
全く同じデータが取得できていることがわかる。
bladeで使用する際も{{ posts->links() }}
でリンクを用意することができる。