Я использую сетку для отображения предприятий. Я собираюсь сократить наш вызов laravel до минимума, так что, допустим, у меня около 20 000 предприятий, и я не хочу загружать их все, если мне это не нужно. Итак, я показываю панель поиска до того, как сетка загружается для ввода и запроса, и на основе их ввода поиска я загружаю то, что соответствует, с помощью Laravel в сетку.
У меня проблема со специальными символами. Если в БД у меня есть бизнес-имя Lucky's Bar, а ввод для поиска пользователей - Luckys Bar без апострофа, он не находит результата. То же самое с косой чертой или тире.
Как лучше всего это сделать?
PHP - поисковый запрос
public function search($search_input) {
$response = DB::table(self::$table)
->select(array(
'ID',
'Signup_Date',
'Business_Name'
))
->where('Business_Name', 'LIKE', '%'.$search_input.'%')
->order_by('Signup_Date', 'desc')
->get();
return $response;
}
Используя Laravel 3, да, я знаю, что он устарел, у нас есть планы по обновлению, но это текущая проблема, которую нужно исправить. https://laravel3.veliovgroup.com/docs/database/fluent
Что на самом деле хранится в БД? Буквальный ' или соответствующий объект?
Вы можете использовать HTML::entities в своем запросе.
Извините, да, в БД будет Lucky's Bar.
Убедитесь, что апостроф - это ', а не что-то еще, как в случае здесь.
@ GiBiT09 Как насчет поиска подстрок и использования оператора IN в вашем запросе, например, если пользователь ввел Luckys Bar, попробуйте с L, Lu, Luc, Luck, Lucky и т. д. Таким образом, специальные символы не будут мешать вашему поиску. Подстроками будут те, которые начинаются с первого символа, поэтому у вас будут подстроки n для введенной пользователем строки длины n. Единственный недостаток в том, что вы также получите много не очень релевантных результатов.
@ vivek_23 Я понимаю, что вы говорите, и это звучит так, как будто это будет очень медленно с огромным объемом данных.
@ GiBiT09 Достаточно честно.






Один из способов, который может быть неприемлемо медленным, - это
WHERE REPLACE(field, "'", "") LIKE 'tam osha%"
где в БД он хранится как Tam O'Shanter.
'Я знаю, что он устарел, у нас есть планы по обновлению, но это текущая проблема, которую нужно исправить.' - Хех, я слышал это раньше, и, как ни странно, возникла другая проблема, которая задержала его. Учитывая, что Laravel сейчас находится на 5.7, вы можете с уверенностью ожидать, что он исправил многие основные проблемы безопасности, связанные с более ранними версиями.