lundi 18 mai 2020

Reducing the if elseif block Laravel filter

Hi I got a if elseif block like this:

public function competetionList(Request $request) {
        $currentAction = \Route::currentRouteAction();
  //       list($controller, $method) = explode('@', $currentAction);
  //       $controller = preg_replace('/.*\\\/', '', $controller);
  //       $method = preg_replace('/.*\\\/', '', $method);
  //       $data = $this->checkPermission($controller, $method);
        $data = true;
        if($data == true) {
            if($request->sport_id && $request->sport_type && $request->to_date && $request->from_date) {
                $competetion = Competetion::with(['sports','sporttype'])
                                          ->where('delete' , '=' , 0)   
                                          ->where('sport_id' , $request->sport_id)
                                          ->where('sport_type',$request->$sport_type)
                                          ->whereBetween('date',[$request->from_date.' 00:00:00' , $request->to_date.' 23:59:59']);
            } elseif($request->sport_id && $request->sport_type && !$request->to_date && !$request->from_date) {
                $competetion = Competetion::with(['sports','sporttype'])
                                          ->where('delete' , '=' , 0)   
                                          ->where('sport_id', $request->sport_id)
                                          ->where('sport_type',$request->sport_type);
            } elseif($request->sport_id && !$request->sport_type && !$request->to_date && !$request->from_date) {
                $competetion = Competetion::with(['sports','sporttype'])
                                          ->where('delete' , '=' , 0)   
                                          ->where('sport_id' , $request->sport_id);
            } elseif(!$request->sport_id && $request->sport_type && !$request->to_date && !$request->from_date) {
                $competetion = Competetion::with(['sports','sporttype'])
                                          ->where('delete' , '=' , 0)   
                                          ->where('sport_type' , $request->sport_type);
            } elseif(!$request->sport_id && $request->sport_type && $request->to_date && $request->from_date) {
                $competetion = Competetion::with(['sports','sporttype'])
                                          ->where('delete' , '=' , 0)   
                                          ->where('sport_type' , $request->sport_type)
                                          ->whereBetween('date',[$request->from_date.' 00:00:00' , $request->to_date.' 23:59:59']);
            } elseif($request->sport_id && !$request->sport_type && $request->to_date && $request->from_date) {
                $competetion = Competetion::with(['sports','sporttype'])
                                          ->where('delete' , '=' , 0)   
                                          ->where('sport_id' , $request->sport_id)
                                          ->whereBetween('date',[$request->from_date.' 00:00:00' , $request->to_date.' 23:59:59']);
            } elseif(!$request->sport_id && !$request->sport_type && !$request->to_date && !$request->from_date) {
                $competetion = Competetion::with(['sports','sporttype'])
                                          ->where('delete' , '=' , 0);

            }
            $competetionData = $competetion->orderBy('name')->get();
            $response = [
                    'status' => true,
                    'message' => 'Data Avialable',
                    'data'  => $competetionData
                ];
                return response()->json($response); //@ sending response
        } else {
            $response = [
                'status' => false,
                'message' => 'You Dont Have Permission To do it!',
            ];
            return response()->json($response); //@ sending response
        }
    }

My Question is how can i make it simpler ?? Because There will be more filters in future !

Kindly Help Me in this method

Aucun commentaire:

Enregistrer un commentaire