【发布时间】:2020-05-30 10:56:29
【问题描述】:
我有一个类似的搜索:
$users = User::search($q)
->orderBy($sortBy, $orderBy)
->paginate($perPage);
我可以使用
在刀片中对结果进行分页{{ $users->render() }}
没问题。 但是我的 SearchController 继续像
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,集合的分页。
我该如何解决这个问题?谢谢解答!
【问题讨论】:
-
您的问题很难理解,最好粘贴您用于搜索的完整方法。我猜
search()是User模型上的一个范围? -
是的,这是正确的,它是用户模型中的一个 scopeSearch ``` public function scopeSearch($query, $q) { if ($q == null) return $query; return $query ->where('name', 'LIKE', "%{$q}%"); } ``` 重点是我直接从 User:: 集合中获取 $users,但在搜索中我过滤了相同的 $users 以用于其他搜索请求,但是当我直接使用 User:: 集合而不是传递的集合时,我只能使用分页$用户
-
如何将数据传递给集合? collection 接受一个构建器实例,因此您应该能够传递您的查询。此外,您可以尝试在
return之前应用 paginate,以防 laravel 取消设置分页。