На моем сайте есть панель поиска с автозаполнением, где пользователи могут искать путеводители. Немного из путеводителей есть название, например: Экипировщик Снукки Как видите, в названии есть апостроф. Поэтому, когда пользователь вводит первое слово и нажимает этот апостроф, запрос игнорирует остальные, потому что пользователь не вставил апостроф в строку поиска. Мне было интересно, как я мог игнорировать этот апостроф в базе данных.
Вот как настраивается мой запрос, когда кто-то ищет:
public function index()
{
$query = request()->get('query');
$results = Listing::searchAndCache($query);
return view('search.index', compact('results', 'query'));
}
Моя модель листинга:
public static function searchAndCache($query)
{
return self::whereHas('locations', function($m) use($query) {
$m->where('region', 'like', '%'.$query.'%');
$m->orWhere('country', 'like', '%'.$query.'%');
$m->orWhere('city', 'like', '%'.$query.'%');
$m->orWhere('county', 'like', '%'.$query.'%');
$m->orWhere('regionCode', 'like', '%'.$query.'%');
})->live()->orWhere(function($m) use($query){
$m->where('name','like','%'.$query.'%');
$m->live();
})->paginate();
}
Я знаю, что об этом уже спрашивали, особенно для PHP, но я просто не знаю, как бы я реализовал это в поисковом запросе Laravel.
Вам необходимо использовать HTML :: entity () для кодирования квот вашего запроса sq, и двойные кавычки будут заменены ссылками html.
public static function searchAndCache($query)
{
$query = HTML::entities($query);
return self::whereHas('locations', function($m) use($query) {
$m->where('region', 'like', '%'.$query.'%');
$m->orWhere('country', 'like', '%'.$query.'%');
$m->orWhere('city', 'like', '%'.$query.'%');
$m->orWhere('county', 'like', '%'.$query.'%');
$m->orWhere('regionCode', 'like', '%'.$query.'%');
})->live()->orWhere(function($m) use($query){
$m->where('name','like','%'.$query.'%');
$m->live();
})->paginate();
}
Других решений пока нет …