Laravel Поиск между датами filter - PullRequest
0 голосов
/ 15 апреля 2019

Я использую Laravel 5.8 и mysql. Я хочу создать поиск между датами, используя поле made_at в качестве критерия. Когда выбраны StartDate и EndDate, а затем нажата кнопка поиска, результат отобразится в GridView. Затем при нажатии кнопки «Экспорт» выполняется экспорт в Excel. По умолчанию он отображается в GridView. но при нажатии кнопок поиска и экспорта ничего не происходит.

Я создал контроллер отчетов и представление, включая средства выбора даты

* 1005-регулятора *

public function showServiceOverview()
{
    $serviceoverviews = ServicePackage::with('services')->paginate(15);

    $column = '';
    $string = '';
    $dateFrom = '';
    $dateTo = '';      

    return view('report.serviceoverview.show_service_overview', compact('serviceoverviews', 'column', 'string','dateFrom','dateTo'));         
}

public function searchServiceoverview(Request $request)
{

try
{
    $column = $request->column;
    $dateTo = $request->dateTo;
    $dateFrom = $request->dateFrom; 

    $data = ['created_at' => 'service_package.created_at', 'title' => 'service_package.title', 'descriptions' => 'service_package.descriptions', 'service_name' => 'services.name'];        

    if ($request->button == 'Search')   
    {
      $serviceoverviews = \DB::table('service_package')->select('service_package.id', 'service_package.title', 'service_package.descriptions', 'service_package.created_at', 'services.name')->join('services', 'service_package.service_id', '=', 'services.id');            

      if (!empty($column) && !empty($string) && empty($dateFrom) && empty($dateTo))
      {
        $serviceoverviews = $serviceoverviews->whereRaw($data[$column] . " like '%" . $string . "%' ")->paginate(20);
      }
      elseif (!empty($dateFrom) && !empty($dateTo) && empty($column) && empty($string))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereBetween('created_at', [$dateFrom, $dateTo])->paginate(20);
      }
      elseif (!empty($column) && !empty($string) && !empty($dateFrom) && !empty($dateTo))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereRaw($data[$column] . " like '%" . $string . "%'")->whereBetween('created_at', [$dateFrom, $dateTo])->paginate(20);
      }
      elseif (empty($column) && empty($string) && !empty($dateFrom) && !empty($dateTo))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereRaw()->whereBetween('created_at', [$dateFrom, $dateTo])->paginate(20);
      }          
      else
      {
        $serviceoverviews = $serviceoverviews->paginate(20);
      }
      $post = 'post';

      return view('report.serviceoverview.show_service_overview', compact('serviceoverviews', 'post', 'column', 'string','dateFrom','dateTo'));          
    }
    else
    {
      /**
       * First we build a query string which is common in both cases whether we have a condition set or not
       */
      $serviceoverviews = \DB::table('service_package')->select('service_package.id', 'service_package.title', 'service_package.descriptions', 'service_package.created_at', 'services.name')->join('services', 'service_package.service_id', '=', 'services.id');

      if (!empty($column) && !empty($string) && empty($dateFrom) && empty($dateTo))
      {
        $serviceoverviews = $serviceoverviews->whereRaw($data[$column] . " like '%" . $string . "%' ")->get();
      }
      elseif (!empty($dateFrom) && !empty($dateTo) && empty($column) && empty($string))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereBetween('date_from', [$dateFrom, $dateTo])->get();
      }
      elseif (!empty($column) && !empty($string) && !empty($dateFrom) && !empty($dateTo))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereRaw($data[$column] . " like '%" . $string . "%'")->whereBetween('date_from', [$dateFrom, $dateTo])->get();
      }
      else
      {
        $serviceoverviews = $serviceoverviews->get();
      }

      $fileName = 'Service_Overview_' . rand(1, 1000) . '.csv';
      $filePath = storage_path('export/') . $fileName;
      $file = new \SplFileObject($filePath, "a");
      // Add header to csv file.
      $headers = ['id', 'title', 'descriptions', 'created_at', 'service_name'];
      $file->fputcsv($headers);
      $status = '';
      foreach ($leaves as $leave)
      {
        $file->fputcsv([$serviceoverviews->id, $serviceoverviews->title, $serviceoverviews->descriptions, $serviceoverviews->created_at, $serviceoverviews->service_name]);
      }

      return response()->download(storage_path('export/') . $fileName);            
    }

  } 
  catch (\Exception $e)
  {
    return redirect()->back()->with('message', $e->getMessage());
  }            
}

View

public function searchServiceoverview(Request $request)
{

try
{
    $column = $request->column;
    $dateTo = $request->dateTo;
    $dateFrom = $request->dateFrom; 

    $data = ['created_at' => 'service_package.created_at', 'title' => 'service_package.title', 'descriptions' => 'service_package.descriptions', 'service_name' => 'services.name'];        

    if ($request->button == 'Search')   
    {
      $serviceoverviews = \DB::table('service_package')->select('service_package.id', 'service_package.title', 'service_package.descriptions', 'service_package.created_at', 'services.name')->join('services', 'service_package.service_id', '=', 'services.id');            

      if (!empty($column) && !empty($string) && empty($dateFrom) && empty($dateTo))
      {
        $serviceoverviews = $serviceoverviews->whereRaw($data[$column] . " like '%" . $string . "%' ")->paginate(20);
      }
      elseif (!empty($dateFrom) && !empty($dateTo) && empty($column) && empty($string))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereBetween('created_at', [$dateFrom, $dateTo])->paginate(20);
      }
      elseif (!empty($column) && !empty($string) && !empty($dateFrom) && !empty($dateTo))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereRaw($data[$column] . " like '%" . $string . "%'")->whereBetween('created_at', [$dateFrom, $dateTo])->paginate(20);
      }
      elseif (empty($column) && empty($string) && !empty($dateFrom) && !empty($dateTo))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereRaw()->whereBetween('created_at', [$dateFrom, $dateTo])->paginate(20);
      }          
      else
      {
        $serviceoverviews = $serviceoverviews->paginate(20);
      }
      $post = 'post';

      return view('report.serviceoverview.show_service_overview', compact('serviceoverviews', 'post', 'column', 'string','dateFrom','dateTo'));          
    }
    else
    {
      /**
       * First we build a query string which is common in both cases whether we have a condition set or not
       */
      $serviceoverviews = \DB::table('service_package')->select('service_package.id', 'service_package.title', 'service_package.descriptions', 'service_package.created_at', 'services.name')->join('services', 'service_package.service_id', '=', 'services.id');

      if (!empty($column) && !empty($string) && empty($dateFrom) && empty($dateTo))
      {
        $serviceoverviews = $serviceoverviews->whereRaw($data[$column] . " like '%" . $string . "%' ")->get();
      }
      elseif (!empty($dateFrom) && !empty($dateTo) && empty($column) && empty($string))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereBetween('date_from', [$dateFrom, $dateTo])->get();
      }
      elseif (!empty($column) && !empty($string) && !empty($dateFrom) && !empty($dateTo))
      {
        $dateTo = date_format(date_create($request->dateTo), 'Y-m-d');
        $dateFrom = date_format(date_create($request->dateFrom), 'Y-m-d');
        $serviceoverviews = $serviceoverviews->whereRaw($data[$column] . " like '%" . $string . "%'")->whereBetween('date_from', [$dateFrom, $dateTo])->get();
      }
      else
      {
        $serviceoverviews = $serviceoverviews->get();
      }

      $fileName = 'Service_Overview_' . rand(1, 1000) . '.csv';
      $filePath = storage_path('export/') . $fileName;
      $file = new \SplFileObject($filePath, "a");
      // Add header to csv file.
      $headers = ['id', 'title', 'descriptions', 'created_at', 'service_name'];
      $file->fputcsv($headers);
      $status = '';
      foreach ($leaves as $leave)
      {
        $file->fputcsv([$serviceoverviews->id, $serviceoverviews->title, $serviceoverviews->descriptions, $serviceoverviews->created_at, $serviceoverviews->service_name]);
      }

      return response()->download(storage_path('export/') . $fileName);            
    }

  } 
  catch (\Exception $e)
  {
    return redirect()->back()->with('message', $e->getMessage());
  }            
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...