Нормальный ли это код? и как его можно оптимизировать (Фильтр данных из базы)?
Более резиновый вариант, используя коллекции и scope функции:public function scopeFilter($query, $parameters = []){
    $fields = ['visa_type', 'status', 'company'];
    $filter = collect([
      'visa_type' => null,
      'status' => null,
      'company' => null,
      'paginate' => 40,
      'order' => 'id',
      'sort' => 'desc'
    ])->merge($parameters);

    if (!Auth::user()->hasRole('administrator|Manager')) {
      $query->where('user_id', Auth::user()->id);
    }
    
    foreach($filter->only($fields) as $field => $value){
      $query->where($field, $value);
    }

    return $query
      ->orderBy($filter->get('order'), $filter->get('sort'))
      ->paginate($filter->get('paginate'))
      ->toArray()['data'];
}
Использование - SomeModel::where(...)->filter([
   'visa_type' => '....',
   'paginate' => 20,
   'sort' => 'asc'
]);
нужно оптимизировать
Попробуйте что-то типа:$dataProvider = new self(); //вот этот момент надо проверить
if ($visa_type) {
    $dataProvider->where('visa_type', $visa_type);
}
if ($status) {
    $dataProvider->where('status', $status);
}

...

return $dataProvider->orderBy('id', 'desc')
                    ->paginate(40)
                    ->toArray()['data']