我正在尝试向我的网站添加搜索功能,并且一直在修改我需要执行的雄辩查询。目前,我已经进行了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应用程序很重要。
答案 0 :(得分:1)
将约束合并到单个查询中:
$images = Image::where('name', 'like', '%'.$query.'%')
->orWhereHas('tags', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->orWhereHas('category', function($q) use ($query) {
return $q->where('name', 'like', '%'.$query.'%');
})->latest()
->get();
latest()
等效于orderBy('created_at', 'desc')
。