Не работает метод map() с методом paginate() в Laravel Eloquent.
Столкнулся с проблемой, не работает метод map() с методом paginate() в Laravel Eloquent. Метод map() создает новую коллекцию. Соответственно при попытке использовать его с методом paginate() ничего не получится. Используя map() мы получим коллекцию без пагинации.
$users = User::paginate($request->per_page ?? 10)->map(function ($user) {
$user->confirm_email = $user->email_verified_at ? true : false;
$user->role_name = $user->roles()->first() ? $user->roles()->first()->name : null;
return $user;
});
Для того, чтобы изменить значения в полученной коллекции, нужно использовать метод through().
$users = User::paginate($request->per_page ?? 10)->through(function ($user) {
$user->confirm_email = $user->email_verified_at ? true : false;
$user->role_name = $user->roles()->first() ? $user->roles()->first()->name : null;
return $user;
});
В результате мы получим измененную коллекцию с пагинацией. Я написал это для себя в качестве шпаргалки, но вдруг кому-то это также будет полезно.