Прежде всего, когда вы применяете where(A)->orWhere(B)
для запроса и применения нового метода where(C)...
, он становится:
where (A and C and D ...) or B
, вам нужно изменить его на
where (A or B) and C and D ....
поэтому первый запрос должен быть таким:
if ($request->has('search_fullname') && !is_null($request->search_fullname)) {
$query->where(function($q) {
$q->where('full_name', 'ILIKE', $request->search_fullname . '%')
->orWhere('full_name', 'ILIKE', '% ' . $request->search_fullname . '%');
})
}
Во-вторых, вы можете использовать , когда в качестве метода условия, он будет применяться к запросу только тогда, когда поле запроса не пусто .
$query->when($request->input('search_fullname'), function($q) use ($request) {
$q->where(function($q) {
$q->where('full_name', 'ILIKE', $request->search_fullname.'%')
->orWhere('full_name', 'ILIKE', '% ' . $request->search_fullname . '%');
});
})->when($request->input('search_gender'), function($q) use ($request) {
$q->where('gender', '=', $request->search_gender);
});