Просмотрено
Category: Шпаргалки

Не работает метод map() с методом paginate() в Laravel Eloquent.

Не работает метод map() с методом paginate() в Laravel Eloquent.

Не работает метод 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;
        });

В результате мы получим измененную коллекцию с пагинацией. Я написал это для себя в качестве шпаргалки, но вдруг кому-то это также будет полезно.