Специальные символы и поисковые запросы в Laravel 3

Я использую сетку для отображения предприятий. Я собираюсь сократить наш вызов 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

'Я знаю, что он устарел, у нас есть планы по обновлению, но это текущая проблема, которую нужно исправить.' - Хех, я слышал это раньше, и, как ни странно, возникла другая проблема, которая задержала его. Учитывая, что Laravel сейчас находится на 5.7, вы можете с уверенностью ожидать, что он исправил многие основные проблемы безопасности, связанные с более ранними версиями.

Script47 25.10.2018 16:04

Что на самом деле хранится в БД? Буквальный ' или соответствующий объект?

Script47 25.10.2018 16:07

Вы можете использовать HTML::entities в своем запросе.

AnTrakS 25.10.2018 16:08

Извините, да, в БД будет Lucky's Bar.

GiBiT 09 25.10.2018 16:09

Убедитесь, что апостроф - это ', а не что-то еще, как в случае здесь.

Script47 25.10.2018 16:10

@ GiBiT09 Как насчет поиска подстрок и использования оператора IN в вашем запросе, например, если пользователь ввел Luckys Bar, попробуйте с L, Lu, Luc, Luck, Lucky и т. д. Таким образом, специальные символы не будут мешать вашему поиску. Подстроками будут те, которые начинаются с первого символа, поэтому у вас будут подстроки n для введенной пользователем строки длины n. Единственный недостаток в том, что вы также получите много не очень релевантных результатов.

nice_dev 25.10.2018 16:24

@ vivek_23 Я понимаю, что вы говорите, и это звучит так, как будто это будет очень медленно с огромным объемом данных.

GiBiT 09 25.10.2018 16:33

@ GiBiT09 Достаточно честно.

nice_dev 25.10.2018 16:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
495
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из способов, который может быть неприемлемо медленным, - это

WHERE REPLACE(field, "'", "") LIKE 'tam osha%"

где в БД он хранится как Tam O'Shanter.

Другие вопросы по теме