#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();