我正在尝试对 $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
如果我没记错的话,
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 查询。