Laravel搜索结果分页而不直接收集



我有一个这样的搜索:

$users = User::search($q)
->orderBy($sortBy, $orderBy)
->paginate($perPage);

我可以在刀片中分页结果

{{ $users->render() }}

没关系。 但是我的搜索控制器继续像

if($request->loc){
$users = $users->where('loc',$request->loc);
}
if($request->sz) {
$users = $users->where('sz',$request->sz);
}
...
return view('search', compact('users'));

这意味着我不能在刀片中使用 {{ $users->render(( }},因为$users没有集合的 orderBy,分页。

我该如何解决这个问题?感谢您的回答!

您不应该将分页和过滤集合结合起来,它会使结果不稳定。如果要使用分页进行过滤,则必须在QueryBuilder.

对于您的逻辑,您可以在QueryBuilder上使用when($condition, $clojure),该仅在条件为真时执行。

$users = User::search($q)
->orderBy($sortBy, $orderBy)
->when($request->loc, function ($query) use ($request) {
$query->where('loc', $request->loc);
})
->when($request->sz, function ($query) use ($request) {
$query->where('sz', $request->sz);
})
->paginate($perPage);
return view('search', compact('users'));

最新更新