Laravel 中使用查询生成器的复杂查询
Complex query in Laravel using Query Builder
我正在尝试在我的网站上实现搜索功能。当有人输入关键字时,我应该根据帖子标题或 body,或根据用户名、用户名或简历找到可能与该关键字匹配的所有帖子和用户。但是我在执行这个查询时遇到了问题。
public function search(Request $request) {
$keyword = $request->get('q');
$posts = Post::where('deleted', 0)
->where('title', 'like', '%'.$keyword.'%')
->orWhere('body', 'like', '%'.$keyword.'%')
->orderBy('title')
->get();
$users = User::where('name', 'like', '%'.$keyword.'%')
->where('active', 1)
->orWhere('username', 'like', '%'.$keyword.'%')
->orWhere('bio', 'like', '%'.$keyword.'%')
->orderBy('username')
->get();
return view('searchresults', compact('users', 'posts'));
}
我遇到的具体问题是函数 search
$posts 变量包含已删除的帖子。
这是我真正需要的:
select * from posts where deleted = 0 and (title like $keyword or body like $keyword)
感谢任何帮助。
谢谢。 :)
使用 closure 将 where()
和 orWhere()
分组,如下所示:
$posts = Post::where('deleted', 0)
->where(function($q) use($keyword) {
$q->where('title', 'like', '%' . $keyword . '%')
->orWhere('body', 'like', '%' . $keyword . '%');
})
->orderBy('title')
->get();
public function search(Request $request) {
$keyword = $request->get('q');
$posts = Post::whereNull('deleted')
->where('title', 'like', '%'.$keyword.'%')
->orWhere('body', 'like', '%'.$keyword.'%')
->orderBy('title')
->get();
$users = User::where(function($query) use($keyword){
$query->where('name', 'like', '%'.$keyword.'%');
$query->orWhere('username', 'like', '%'.$keyword.'%');
$query->orWhere('bio', 'like', '%'.$keyword.'%');
})
->where('active', 1)
->orderBy('username')
->get();
return view('searchresults', compact('users', 'posts'));
}
希望对你有所帮助!!
我正在尝试在我的网站上实现搜索功能。当有人输入关键字时,我应该根据帖子标题或 body,或根据用户名、用户名或简历找到可能与该关键字匹配的所有帖子和用户。但是我在执行这个查询时遇到了问题。
public function search(Request $request) {
$keyword = $request->get('q');
$posts = Post::where('deleted', 0)
->where('title', 'like', '%'.$keyword.'%')
->orWhere('body', 'like', '%'.$keyword.'%')
->orderBy('title')
->get();
$users = User::where('name', 'like', '%'.$keyword.'%')
->where('active', 1)
->orWhere('username', 'like', '%'.$keyword.'%')
->orWhere('bio', 'like', '%'.$keyword.'%')
->orderBy('username')
->get();
return view('searchresults', compact('users', 'posts'));
}
我遇到的具体问题是函数 search
$posts 变量包含已删除的帖子。
这是我真正需要的:
select * from posts where deleted = 0 and (title like $keyword or body like $keyword)
感谢任何帮助。
谢谢。 :)
使用 closure 将 where()
和 orWhere()
分组,如下所示:
$posts = Post::where('deleted', 0)
->where(function($q) use($keyword) {
$q->where('title', 'like', '%' . $keyword . '%')
->orWhere('body', 'like', '%' . $keyword . '%');
})
->orderBy('title')
->get();
public function search(Request $request) {
$keyword = $request->get('q');
$posts = Post::whereNull('deleted')
->where('title', 'like', '%'.$keyword.'%')
->orWhere('body', 'like', '%'.$keyword.'%')
->orderBy('title')
->get();
$users = User::where(function($query) use($keyword){
$query->where('name', 'like', '%'.$keyword.'%');
$query->orWhere('username', 'like', '%'.$keyword.'%');
$query->orWhere('bio', 'like', '%'.$keyword.'%');
})
->where('active', 1)
->orderBy('username')
->get();
return view('searchresults', compact('users', 'posts'));
}
希望对你有所帮助!!