🗂

Laravelのページネーションで返すデータを加工したい!

2022/01/21に公開

Laravelのページネーションを使ってデータを返す時って、データの加工ができないんですよね。
やろうと思っても結構無理矢理感が出るというか。。

そこで、ページネーションで返す時のデータの加工の仕方がようやくわかったので、共有したいと思います!

ユーザー情報一覧を返す場合は基本的にはこのように書くと思います。

$users = User::paginate(20);

では、返す際のユーザー情報を変更したい場合はどうしたら良いか?

それは、一旦自分でページネーションっぽい処理を作ってから、クラスを作ります。

↓ Service層で使うことを想定したようなメソッドにしています。

public function getUsers($perPage, $currentPage) {    
    $totalUsers = User::all(); // 全部取得
    $paginateUsers = $totalUsers->skip(($currentPage - 1) * $perPage)->take($perPage); // 必要な分だけ取得
    
    // 
    // レスポンスするデータをここで加工する
    // 
    
    // 返却するためのページネーションのクラスを作成する
    $paginatedResults = new LengthAwarePaginator(
        $paginateUsers,
        $totalUsers->count(),
        $perPage,
        $currentPage,
        [
	    'path'  => LengthAwarePaginator::resolveCurrentPath(),
        ]
    );
    return $paginatedResults;
}

また、この時、perPage, currentPageはどのようにして受け取るかというと、

コントローラでこのように受け取ります。
必ず初期値を設定しておかないといけないですね。

request()->current_page ?? 1;
request()->per_page ?? 20;

以上、ページネーションで返すデータを加工したいのコーナーでした!

Discussion