Laravel eloquent:使用multiple when()在多个动态条件下进行选择
我有这样一个搜索功能:Laravel eloquent:使用multiple when()在多个动态条件下进行选择,laravel,eloquent,Laravel,Eloquent,我有这样一个搜索功能: public function search(Request $request) { $data = $request->all(); $query = Member::select('members.*', 'profiles.belongs', 'profiles.position') ->leftJoin('profiles', 'members.id', '=', 'profiles.member_id'
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;
}
user_id first_name last_name belongs
1 a b org1
2 c b org2
3 c a null
如您所见,此搜索函数有3个输入:用户id、归属和名称。我原以为它将作为AND条件工作,但对于“name”输入,它就不是了。我有3个这样的用户:
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;
}
user_id first_name last_name belongs
1 a b org1
2 c b org2
3 c a null
例如:
如果我使用user_id=1、belishing=org和name=a进行搜索,它将返回user 1和user 3(预期只返回user 1)。
我做错了什么?所有建议都将不胜感激,非常感谢。事实证明非常简单。我自己解决了这个问题:
$query->where('members.last_name', 'like', '%' . $data['name'] . '%')
->orWhere('members.first_name', 'like', '%' . $data['name'] . '%');
致: