【问题标题】:Laravel eloquent real time search filteringLaravel eloquent 实时搜索过滤
【发布时间】:2020-10-27 10:21:08
【问题描述】:

我正在尝试进行服务器端搜索并想出了这个雄辩的查询...

public function search(Request $request) {
    $data = User::with('instruments')
            ->where('user_type', 'teacher')
            ->orWhere('fname', 'like', '%' . $request->term . '%' )
            ->orWhere('fname', 'like', $request->term . '%' )
            ->orWhere('lname', 'like', '% ' . $request->term . '%' )
            ->orWhere('lname', 'like', $request->term . '%' )
            ->orWhere('email', 'like', '% ' . $request->term . '%' )
            ->orWhere('email', 'like', $request->term . '%' )
            ->orWhere('profession', 'like', '%' . $request->term . '%' )
            ->orWhere('profession', 'like', $request->term . '%' )
            ->limit(10)
            ->get();

        return response()->json($data);
}

我几乎实现了我想要的。例如,当我搜索john 时,它会为我提供所有名称中包含john 的用户。问题是,虽然搜索是正确的并且知道我声明了where('user_type', 'teacher'),结果集仍然给我的用户studentuser_type

【问题讨论】:

标签: laravel eloquent


【解决方案1】:

问题在于OrWhere 使user_type 条件无效,这就是为什么当OrWhere 条件之一适用时它会选择不是教师的用户。

通过使用带有闭包的第二个 where,它将始终只选择具有 user_type 老师的用户:

public function search(Request $request)
{
    $data = User::with('instruments')
        ->where('user_type', 'teacher')
        ->where(function ($query) use ($request) {
            $query->where('fname', 'like', '%' . $request->term . '%')
                ->orWhere('fname', 'like', $request->term . '%')
                ->orWhere('lname', 'like', '% ' . $request->term . '%')
                ->orWhere('lname', 'like', $request->term . '%')
                ->orWhere('email', 'like', '% ' . $request->term . '%')
                ->orWhere('email', 'like', $request->term . '%')
                ->orWhere('profession', 'like', '%' . $request->term . '%')
                ->orWhere('profession', 'like', $request->term . '%');
        })
        ->limit(10)
        ->get();

    return response()->json($data);
}

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 2017-03-21
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多