我有这样的搜索功能:
public function search(Request $request)
{
$data = $request->all();
$query = Member::select('members.*', 'profiles.belongs', 'profiles.position')
->leftJoin('profiles', 'members.id', '=', 'profiles.member_id');
if (!empty($data['belongs'])) {
$query->where('profiles.belongs', 'like', '%' . $data['belongs'] . '%');
}
if (!empty($data['user_id'])) {
$query->where('members.user_id', '=', $data['user_id']);
}
if (!empty($data['name'])) {
$query->where('members.last_name', 'like', '%' . $data['name'] . '%')
->orWhere('members.first_name', 'like', '%' . $data['name'] . '%');
}
$query->groupBy('members.id');
switch ($request->field) {
case 'belongs':
$query->orderBy('profiles.' . $request->field, $request->type);
break;
case 'position':
$query->orderBy('profiles.' . $request->field, $request->type);
break;
case 'name':
$query->orderBy('members.last_name', $request->type);
$query->orderBy('members.first_name', $request->type);
break;
default:
$query->orderBy('members.' . $request->field, $request->type);
}
$members = $query->paginate($request->number_of_item);
return $members;
}
如您所见,此搜索功能具有3个输入:user_id,belong和name。我曾预期它可以作为AND条件使用,但使用“名称”输入则不能。我有3个这样的用户:
user_id first_name last_name belongs
1 a b org1
2 c b org2
3 c a null
例如: 如果我使用user_id = 1进行搜索,所属= org且名称= a,它将返回用户1和3(仅预期用户1)。 我怎么了所有建议将不胜感激,非常感谢。
答案 0 :(得分:0)
事实证明这很简单。我已经通过解决此问题自己解决了:
$query->where('members.last_name', 'like', '%' . $data['name'] . '%')
->orWhere('members.first_name', 'like', '%' . $data['name'] . '%');
收件人:
$query->where(function($q) use ($data) {
$q->where('members.last_name', 'like', '%' . $data['name'] . '%')
->orWhere('members.first_name', 'like', '%' . $data['name'] . '%');
});