🗂
Laravelのページネーションで返すデータを加工したい!
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