Laravel результатов поиска разбиваются на страницы без прямого сбора - PullRequest
0 голосов
/ 30 мая 2020

У меня есть такой поиск:

$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, разбивки на страницы коллекции.

Как я могу это решить? Спасибо за ответ!

1 Ответ

0 голосов
/ 31 мая 2020

Не следует совмещать разбиение на страницы и фильтрацию коллекций, это может сделать результаты нестабильными. Если вам нужна фильтрация с разбивкой на страницы, вы должны сделать это на QueryBuilder.

Для вашего logi c вы можете использовать when($condition, $clojure) на QueryBuilder, который будет выполняться только в том случае, если условие истинно.

$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'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...