Таки разобрался
$usersFiltersOther = $users->where(function ($query) use ($filter) {
foreach ($filter as $item) {
$query->orWhereIn($item[0], $item[1]);
}
});
$selectUsers = null;
foreach ($filter as $item) {
if ($item[0] == 'Rates') {
$selectUsers = App\User::whereHas('rate', function ($q) use ($item) {
$q->where(function ($query) use ($item) {
foreach ($item[1] as $rates) {
$range = explode(' / ', $rates);
$query->orWhere('rates.time', '=', str_replace('s', '', $range[1]))
->where('rates.incall_rates', '>=', $from)
->where('rates.incall_rates', '<=', $to);
}
});
})->union($usersFiltersOther)->get();
}
}
объединять выборки можно через метод union
также помогла статья
https://laravelinfo.com/otladka-zaprosov-v-laravel