Я использую Laravel Scout для замены своих функций поиска, так как раньше это был один большой оператор SQL LIKE, подобный приведенному ниже.
$users = User::where('username', 'like', '%'.$request->get('q').'%')
->orWhere('displayName', 'like', '%'.$request->get('q').'%')
->orWhere('email', 'like', '%'.$request->get('q').'%')
->orWhere('role', 'like', '%'.$request->get('q').'%')
->orWhere('department', 'like', '%'.$request->get('q').'%')
->orWhere('location', 'like', '%'.$request->get('q').'%')
->orWhere('directDialIn', 'like', '%'.$request->get('q').'%')
->orWhere('mobileNumber', 'like', '%'.$request->get('q').'%')
->get();
Я делал это для нескольких моделей, таких как Article, Event и т. Д., И сценарий в конечном итоге раздулся. Я выполнил необходимые шаги в документации и настроил Laravel Scout для использования TNTSearch с использованием предоставляемого ими пакета Laravel.
В документации Laravel сказано, что Laravel Scout не очень хорош в продвинутых пунктах, где, поэтому, следуя документации немного дальше вниз по странице, я сделал что-то подобное в верхней части моего контроллера.
use Searchable;
public function shouldBeSearchable()
{
return $this->published === "open";
}
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray()
{
$array = $this->toArray();
// Customize array...
return $array;
}
Он должен возвращать только те модели, в которых опубликованные значения равны 'open' в моей таблице базы данных (или я так думал). Однако я запускаю следующую команду:
php artisan scout:import "App\Article"
Затем выполните поиск, он по-прежнему возвращает закрытые статьи. Я думал, определив shouldBeSearchable
, это предотвратит это?
Кроме того, возможно ли индексировать отношения на модели при выполнении поиска разведчика? Например, если у пользователя есть профиль, могу ли я использовать Scout для поиска профиля, связанного с пользователем? Я хочу, чтобы можно было вводить текст в поле, а Скаут сканирует текст и возвращает пользователя, которому принадлежит профиль.