搜索多个表
Search with multiple tables
我有 3 个 table 是 connected/have 关系。
- 帖子table有多个标签和一个类别
- 类别table有很多帖子
- 标签 table 有很多帖子
我想要一个搜索功能,我知道如何只使用帖子(基于标题)进行搜索。
我尝试在我的控制器中使用 Where 搜索每个 tables,但仍然没有成功。
public function Search(Request $request)
{
$search = $request->search;
$posts = post::where('title', 'like', "%{$search}%")->paginate(5);
return view('search', compact('posts'))->with('result', $search);
}
例如
我有一个 post 标题 'Test' 类别 'Tost' 标签 'Tast and Tust'
所以如果我输入标题、类别或标签,我希望它显示出来。我怎样才能实现它?
你必须这样使用。
Post::where('title', 'like', '%' . Input::get('search') . '%')->get();
尝试使用 whereHas 方法(更多信息请查看 https://laravel.com/docs/5.8/eloquent-relationships#querying-relations)
所以会变成这样:
Post::query()
->where('title', 'like', "%$search%")
->orWhereHas('categories', function ($query) use ($search) {
$query->where('name', 'like', "%$search%");
})
我有 3 个 table 是 connected/have 关系。
- 帖子table有多个标签和一个类别
- 类别table有很多帖子
- 标签 table 有很多帖子
我想要一个搜索功能,我知道如何只使用帖子(基于标题)进行搜索。
我尝试在我的控制器中使用 Where 搜索每个 tables,但仍然没有成功。
public function Search(Request $request)
{
$search = $request->search;
$posts = post::where('title', 'like', "%{$search}%")->paginate(5);
return view('search', compact('posts'))->with('result', $search);
}
例如
我有一个 post 标题 'Test' 类别 'Tost' 标签 'Tast and Tust'
所以如果我输入标题、类别或标签,我希望它显示出来。我怎样才能实现它?
你必须这样使用。
Post::where('title', 'like', '%' . Input::get('search') . '%')->get();
尝试使用 whereHas 方法(更多信息请查看 https://laravel.com/docs/5.8/eloquent-relationships#querying-relations)
所以会变成这样:
Post::query()
->where('title', 'like', "%$search%")
->orWhereHas('categories', function ($query) use ($search) {
$query->where('name', 'like', "%$search%");
})