这是我的控制器
$term = $request->get('q');
// return $request->q;
$products = Post::whereHas('user', function($query) use($term) {
$query->where('name', 'like', '%'.$term.'%');
})->orWhere('tags','LIKE','%'.$term.'%')->get();
return view('pages.search', compact('products','users'));
这对于单个关键字搜索非常有用。但我想将其用于多个关键字。像laravel php等。当我搜索多个值(例如abc php laravel或其他任何值)时,请引导我,它应该可以工作。如果标签存在于不同的列中,例如当我搜索php laravel时,php在第一列中存在laravel在下一列中,则它应该显示两个列值。
可能有更好的方法来执行此操作,例如使用CloudSearch / Algolia,但这是对我们有用的解决方案:
// Split the terms by word.
$terms = explode(" ", request('q'));
$products = Post::query()
->whereHas('user', function ($query) use ($terms) {
foreach ($terms as $term) {
// Loop over the terms and do a search for each.
$query->where('name', 'like', '%' . $term . '%');
}
})
->orWhere(function ($query) use ($terms) {
foreach ($terms as $term) {
$query->where('tags', 'like', '%' . $term . '%');
}
})
->get();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句