Laravel Дополнительные условия поиска - PullRequest
1 голос
/ 25 апреля 2020

Я использую плагин Laravel для поиска в течение нескольких месяцев, и он работает нормально. Как новая задача в одном из моих проектов, я должен добавить дополнительное условие к поиску.

Итак, моя идея состоит в том, что если пользователь заблокирован (у него есть статус == 0), чтобы не отображаться в результат поиска.

Это мой код:

PageController:

public function searchMember(Request $request, $id)
    {

      $this->validate($request, [
        'query' => 'required',

      ]);

      $query = $request->input('query');

      $searchResults = (new Search())
          ->registerModel(User::class, 'first_name', 'last_name')
          ->perform($query);

      return view('user.search', compact('searchResults'));

    }

Вид:

<div class="result-count">{{ $searchResults->count() }} results found for "{{ request('query') }}"</div>
<div class="result">
  @foreach($searchResults->groupByType() as $type => $modelSearchResults)
    @foreach($modelSearchResults as $searchResult)
        <div class="article">
          <a href="{{ $searchResult->url }}">{{ $searchResult->title }}</a>
        </div>
    @endforeach
  @endforeach
</div>

Работает нормально, но я хочу добавить параметр where (), поэтому я могу отображать только активных пользователей (статус 1). Я прочитал, если я хочу добавить условия, я должен настроить код, и я попытался так в моем контроллере:

public function searchMember(Request $request, $id)
{

  $this->validate($request, [
    'query' => 'required',

  ]);

  $searchResults = (new Search())
     ->registerModel(User::class, function(ModelSearchAspect $modelSearchAspect) {
         $modelSearchAspect
            ->addSearchableAttribute('first_name')
            ->addSearchableAttribute('last_name')
            ->where('status', 0); // This won't work
     })->search($request->input('query'));

  return view('user.search', compact('searchResults'));

}

, но я получаю эту ошибку:

Type error: Argument 1 passed to App\Http\Controllers\PageController::App\Http\Controllers\{closure}() must be an instance of App\Http\Controllers\ModelSearchAspect, instance of Spatie\Searchable\ModelSearchAspect given, called in...

Пожалуйста, помогите мне решить эту проблему.

РЕДАКТИРОВАТЬ:

ОК, я исправил ошибку, добавив

use Spatie\Searchable\ModelSearchAspect;

поверх контроллера .

Как добавить условие в searchResult?

1 Ответ

0 голосов
/ 25 апреля 2020

Попробуйте ввести тип подсказки в закрытии

$searchResults = (new Search())
     ->registerModel(User::class, function(\App\Http\Controllers\ModelSearchAspect $modelSearchAspect) {
        //...
     })->search($request->input('query'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...