Привязка неизвестного количества ключевых слов к оператору SQL с помощью подстановочных знаков - PullRequest
0 голосов
/ 10 июля 2020

Я хочу привязать ключевые слова к запросу SQL следующим образом:

SELECT `field_1`, `field2` FROM `table` WHERE 
`field_1` LIKE '%keyword1%' 
OR `field_1` LIKE '%keyword2%'
OR `field_1` LIKE '%keyword3%'

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

Я использую Laravel 7. Итак, я ищу решение, которое соответствует Laravel 7 и PDO. Проблема в том, что я не могу использовать '%?%' в своем операторе SQL, потому что тогда я не смогу привязать к нему значения в моем массиве.

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

1 Ответ

3 голосов
/ 10 июля 2020

Что касается вашего примера запроса, вам нужно добавить % к значению вместо оператора, чтобы он выглядел так:

WHERE foo LIKE ? OR foo LIKE ?

А затем передать значения как "%$var1%", "%$var2%" и т. д.

Использование Laravels Query Builder

Убедитесь, что у вас есть все поисковые слова в массиве. Затем вы можете в конструкторе запросов Laravels (который, как вы упомянули, используете) сделать что-то вроде этого:

$searchWords = ['val1', 'val2', 'val3'];

// Now get the query builder and pass closure as the argument
$query = DB::table('some-table')
    ->where(function($query) use ($searchWords) {
        // Iterate through the words and add them one by one
        foreach ($searchWords as $word) {
            $query->orWhere('field', 'LIKE', "%{$word}%");
        }
    });

$result = $query->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...