Поиск нескольких слов в одном столбце в laravel

#jquery #laravel #search #eloquent

#jquery #laravel #Поиск #красноречивый

Вопрос:

Мне нужно выполнить поиск нескольких слов в title столбце в laravel. Например, если я выполняю поиск, tea break тогда мне нужно извлекать только те строки, которые озаглавлены content tea и break . Если какой-либо заголовок содержит только tea, то он не появится в моем результате. Я добавил приведенный ниже код, но его выборка также содержит только одну строку слова.

 $query->where('title', 'LIKE', "%$search%");
  

Например, если я выполняю поиск Hello Tea break , то извлекаю только те строки, которые содержат все три слова. то есть hello , tea break .

Если я буду искать Hello Tea amp; break . В этом случае я удалю все пробелы из своего кода и добавлю приведенный ниже массив в код.

 $search = []
$search[0] = 'Hello';
$search[1] = 'Tea';
$search[2] = 'break'
  

Комментарии:

1. Это должно выполняться несколькими предложениями where типа LIKE

2. Вы правы, но мне нужно извлекать только те заголовки, которые содержат tea и break . Если какой-либо заголовок содержит только tea, то он также присутствует в моем коде.

Ответ №1:

Вы могли бы создать экземпляр массива, содержащего ваши строки поиска, затем использовать ->orWhere() метод в коллекции, чтобы найти их.

 $keywords = ['hello', 'tea', 'break'];
$result = $query->where(function ($query) use ($keywords) {
    foreach ($keywords as $keyword) {
       $query->orWhere('title', 'LIKE', "%$keyword%");
    }
});
  

Комментарии:

1. было бы "%$keyword%"

2. Действительно, @sta, я только что добавил это.

3. должно ли это быть «и где», а не «или где», поскольку они хотят, чтобы результаты содержали все ключевые слова, а не только некоторые из них?

Ответ №2:

     $search = ['hello', 'tea', 'break'];
    $pages = Page::query();
    foreach ($search as $word) {
        $pages->orWhere('title', 'LIKE', '%' . $word . '%');
    }
    $pages = $pages->distinct()->get();