我正在尝试在服务器端进行搜索,并提出了这个雄辩的查询...
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')
,结果集仍然为我提供了student
user_type
答案 0 :(得分:1)
问题在于OrWhere
使user_type
条件无效,这就是为什么当OrWhere
条件之一适用时,它选择不是教师的用户的原因。
通过使用第二个带有闭包的位置,它将始终仅选择具有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);
}