Laravel MySQL Search. Разрешение пользователям делать пользовательский логический поиск - PullRequest
0 голосов
/ 06 мая 2018

У меня есть новое требование от клиента для проекта управления сотрудниками, которое я выполняю, чтобы позволить их пользователям выполнять пользовательский логический поиск.

в основном позволяет им использовать: И, ИЛИ, НЕ, скобки и кавычки.

каков наилучший способ реализовать это? Я проверил MySQL, и они используют другой синтаксис.

Это тестовый сценарий:

Требование: Поиск магов или варваров, имеющих звание элитного или ветеранского уровня и выходцев из Сингапура

Булева строка: ("Маг" ИЛИ "Варвар") И (Элита ИЛИ "Уровень ветеранов") и сингапурская

Это один из кодов, которые я буду рассматривать для модификации, который я получил от Булевский поиск строк на чистом PHP

function booleanSearch($content, $search) {
    $criteria = str_getcsv($search, ' ');

    while ($criteria) {
        $not = false;
        $q = array_shift($criteria);

        if (substr($q, 0, 2) === '-"') {
            $not = true;

            while (substr($q, -1) != '"') {
                $q .= " " . array_shift($criteria);
            }

            $q = substr($q, 2, -1);
        }
        else if (substr($q, 0, 1) === '-' && strpos($q, ' ') === false) {
            $not = true;
            $q = substr($q, 1);
        }

        $found = strpos($content, $q) !== false;

        if ($found === $not) {
            return false;
        }
    }

    return true;
}

1 Ответ

0 голосов
/ 06 мая 2018

Вам просто нужна реализация построителя запросов. Исходя из вашего описания, было бы тривиально накатить ваше собственное, в противном случае, существует целый ряд пакетов, облегчающих жизнь. Построитель запросов Spatie работает хорошо: https://github.com/spatie/laravel-query-builder

...