使用查询生成器在laravel中实现php复杂查询

mpbci0fu  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(411)

在我的网站上,我试图实现搜索功能。当有人输入关键字,我应该找到所有的职位和用户,可能符合该关键字的帖子标题或正文,或基于用户名或个人简介。但是,我在执行此查询时遇到问题。

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) 谢谢你的帮助。
谢谢。:)

3okqufwl

3okqufwl1#

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'));
}

希望对你有帮助!!

zed5wv10

zed5wv102#

使用闭包分组 where() 以及 orWhere() 这样地:

$posts = Post::where('deleted', 0)
    ->where(function($q) use($keyword) {
        $q->where('title', 'like', '%' . $keyword . '%')
          ->orWhere('body', 'like', '%' . $keyword . '%');
    })     
    ->orderBy('title')
    ->get();

相关问题