Вы можете использовать filter :
Метод filter фильтрует коллекцию, используя заданный обратный вызов, сохраняя только те элементы, которые проходят данный тест на истинность.
Например:
$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($value, $key) {
return $value > 2;
});
$filtered->all(); // [3, 4]
Внутри вашего контроллера:
public function index($type, $company_id = '')
{
$users = User::whereHas('roles', function ($query) use ($type) {
$query->where('name', '=', $type);
})->get();
//If you want to load the relationship with the users:
/*
$users = User::whereHas('roles', function($query) use ($type) {
$query->where('name', '=', $type)
})
->with('userSettings')
->get()
*/
$users = $users->filter($user){
return $user->userSettings->company_id == 28;
}
return response()->json($users);
}
Надеюсь, это поможет.