Laravel метод разбиения на страницы не работает с методом преобразования - PullRequest
1 голос
/ 10 февраля 2020

Когда я использую метод преобразования после вызова paginate(20), он будет возвращать обычные результаты, without paginating, которые не должны быть.

, и когда я удаляю transform() метод paginate работает так, как он предполагает быть.

$users =
    User::whereUser_role(1)
        ->join('user_types', 'users.user_type', '=', 'user_types.user_type_id')
        ->when(request('user-type'), function ($query) {
            $query->where('user_types.name', '=', request('user-type'));
        })
        ->addSelect(
            'users.*',
            'user_types.name as user_type',
        )
        ->orderBy('users.created_at', 'desc')
        ->paginate(20)
        ->appends(request()->all())
        ->getCollection()
        ->transform(function ($user) {
            $user->user_status = $user->status ? "Active" : "InActive";
            $user->email_verified = $user->email_verified ? "Yes" : "No";
            return $user;
        });

$users->makeHidden(['user_role']);

return response()->json([
            'message' => 'Success',
            'status' => 200,
            'requestLocation' => request()->path(),
            'success' => true,
            'data' => $users
        ], 200);

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете использовать getCollection метод для того же. Согласно laravel Документации API:

getCollection(): получить базовую коллекцию пагинатора.

Например,

$users = User::whereStatus(1)
          ->paginate(20);


// iterates paginated items and applies a transformation 
$users->getCollection()->transform(function ($user) {
    $user->email_verified = $user->email_verified ? "Yes" : "No";
    return $user;
})

Ссылка: Laravel API -> AbstractPaginator -> getCollection ()

...