Я пытаюсь добавить функцию поиска на свой веб-сайт, и я пытаюсь выполнить красноречивые запросы, которые мне нужно выполнить. В настоящее время я сделал 3 запроса, и каждый получает изображения, соответствующие определенным критериям, однако я не уверен, как объединить его в 1 запрос, который бы разбивал все изображения, которые соответствуют одному, двум или всем критериям.
$images = Image::where('name', 'like', '%'.$query.'%')->get();
Этот запрос получает все изображения с именем, похожим на искомое слово.
$images = Image::whereHas('tags', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->orderBy('created_at', 'desc')->get();
Этот запрос получает все изображения с тегом, похожим на искомое слово.
$images = Image::whereHas('category', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->orderBy('created_at', 'desc')->get();
И, наконец, этот запрос получает все изображения, которые имеют категорию, аналогичную искомому слову.
public function search($query){
$images = Image::where('name', 'like', '%'.$query.'%')->get();
$images = Image::whereHas('tags', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->orderBy('created_at', 'desc')->get();
$images = Image::whereHas('category', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->orderBy('created_at', 'desc')->get();
return view('search', ['images' => $images]);
}
Это правильный способ создания функции поиска? Могу ли я что-нибудь сделать, чтобы улучшить его? Есть ли какая-то очевидная проблема, над которой я лично мог бы наблюдать? Буду признателен за любые советы и рекомендации, поскольку считаю, что функциональность поиска важна для таких приложений CRUD, как мое.