withQueryString() 不适用于急切加载和分页

问题描述 投票:0回答:1

我正在尝试对 $users 使用 withQueryString()

$users = $usersQuery->paginate(10);

像这样

$users = $usersQuery->paginate(10)->withQueryString();

但是我收到错误“未定义的方法 withQueryString()”

这是我的代码

public function index(Request $request)
    {
        $usersQuery = User::with('userType');

        // Filter by name
        if ($request->name != null) {
            $usersQuery->where('name', 'like', '%' . $request->name . '%');
        }

        // Filter by role
        if ($request->user_type_id != null) {
            $usersQuery->where('user_type_id', $request->user_type_id);
        }

        // Filter by role
        if ($request->suspended != null) {
            $usersQuery->where('suspended', $request->suspended);
        }

        $users = $usersQuery->paginate(10);

        return view('admin.users.index', [
            'users' => $users,
            'title' => 'Users'
        ]);
    }

如果我在不使用 User::paginate(10) 的情况下使用 withQueryString 而不急切加载,则不会有错误。关于如何解决这个问题有什么想法吗?我正在使用 Laravel 11

laravel eloquent eager-loading
1个回答
0
投票

如果我没记错的话,

Undefined method withQueryString()
仅发生在你的IDE中,而不是在运行它时发生。这是正常的,因为
$userQuery->paginate()
返回在其文档块内定义的
Illuminate\Contracts\Pagination\LengthAwarePaginator
,但是如果您查看其定义或在
vscode
中使用
ctrl+left-click
,您会发现它将返回一个
Illuminate\Pagination\LengthAwarePaginator
,它扩展了
Illuminate\Pagination\AbstractPaginator
,您可以在其中找到
withQueryString()
。但是,如果您对
withQueryString()
中的红色下划线感到困扰,您可以使用
appends()
在引擎盖下使用的
withQueryString()

$data = $userQuery->paginate();
$data->appends($request->query());

它将在分页链接中添加所有 URL 查询。

© www.soinside.com 2019 - 2024. All rights reserved.