Можно ли в Laravel выполнить поиск по двум колонкам одновременно?

Как можно объединить два фрагмента кода для поиска по двум колонкам, таким как 'title' и 'original_title', при использовании данных из колонки 'title'?
  • 25 февраля 2024 г. 17:48
Ответы на вопрос 2
Да, в Laravel можно выполнить поиск по двум колонкам одновременно. Для этого можно воспользоваться методом where(), передавая ему два условия для каждой колонки.

Пример кода для поиска по колонкам 'title' и 'original_title':

```php
$search = 'Some text'; // текст для поиска

$movies = Movie::where('title', 'like', '%' . $search . '%')
                ->orWhere('original_title', 'like', '%' . $search . '%')
                ->get();
```

В этом примере мы ищем все записи, в которых значение колонки 'title' или 'original_title' содержит заданный текст.

Чтобы объединить два фрагмента кода для поиска по двум колонкам 'title' и 'original_title' при использовании данных из колонки 'title', можно воспользоваться методом selectRaw():

```php
$search = 'Some text'; // текст для поиска

$movies = Movie::selectRaw('*, IF(title LIKE "%' . $search . '%", 1, 0) + IF(original_title LIKE "%' . $search . '%", 1, 0) as relevance')
                ->where('title', 'like', '%' . $search . '%')
                ->orWhere('original_title', 'like', '%' . $search . '%')
                ->orderBy('relevance', 'desc')
                ->get();
```

В данном примере мы добавляем дополнительное поле 'relevance', которое считает количество совпадений текста в колонках 'title' и 'original_title'. После этого сортируем результаты по убыванию 'relevance'.
havingRaw / orHavingRaw разве тут не поможет? 

Ну и второе объединенное поле обозвать по другому, например original_title_and_year .

->selectRaw("concat(title, ' ', release_date) as title_and_year, concat(original_title, ' ', release_date) as original_title_and_year")


Или надо не совсем это?

P.S. А еще лучше перевести поиск на Meilisearch
Похожие вопросы