keigo-uの備忘録

沖縄で情報系の大学に通う大学生の技術ブログです。

配列(コレクション)からpaginateを行う方法

概要

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() }}でリンクを用意することができる。