2016-10-13 2 views
0

Здравствуйте, я пишу php-приложение, и в настоящее время я придерживаюсь метода, который возвращает рейсы из базы данных и применяет к нему различные фильтры. Нет проблем при первоначальной загрузке страницы без применения каких-либо фильтров, все записи из БД загружаются, как ожидалось. Затем снова все, как ожидалось, когда я использую фильтры «Аэропорт отправления» или «Аэропорт прибытия», а также фильтр «Только для оплаты».Функция пользовательского поиска Codeigniter

Это совершенно другая история, когда вы пытаетесь использовать фильтр «Только для оплаты», он не загружает никаких записей из базы данных. То же самое и с фильтром «Aircraft», не работает сама по себе и с «бронируются только» фильтр, но работает в сочетании с оба или один из фильтров аэропорта + «бронируются только» фильтр

Schedules_model.php

public function getFilteredSchedule($available, $departureICAO, $arrivalICAO, $specificAircraftId) 
{ 
    $this->db->select('*'); 

    if($departureICAO != FALSE) { 
     $this->db->where('departureICAO', $departureICAO); 
    } 
    if($arrivalICAO != FALSE) { 
     $this->db->where('arrivalICAO', $arrivalICAO); 
    } 
    if($specificAircraftId != FALSE) { 
     $this->db->where('aircraftId', $specificAircraftId); 
    } 

    $schedules = $this->db->where('active', 1) 
        ->order_by('id', 'asc') 
        ->get('schedules') 
        ->result_array(); 

    $schedulesAvailable = array(); 

    if($available === TRUE) { 

     echo 'work'; 

     foreach($schedules as $key => $schedule) { 

      if($this->RebuildVA->mustBeAtDepartureAirport()) { 
       if($this->Aircrafts->isAtAirport($schedule['aircraftId'], $schedule['departureICAO'])) { 
        $schedulesAvailable[$key] = $schedule; 
       } else { 
        break; 
       } 
      } else { 
       $schedulesAvailable[$key] = $schedule; 
      } 

      if(!$this->RebuildVA->allowMultipleAircraftBookings()) { 
       if(!$this->Aircrafts->isBooked($schedule['aircraftId'])) { 
        $schedulesAvailable[$key] = $schedule; 
       } else { 
        break; 
       } 
      } else { 
       $schedulesAvailable[$key] = $schedule; 
      } 

      if(!$this->RebuildVA->allowMultiplePilotBookings()) { 
       if(!$this->Pilots->hasBookedFlight($this->session->userdata('pilotId'))) { 
        $schedulesAvailable[$key] = $schedule; 
       } else { 
        break; 
       } 
      } else { 
       $schedulesAvailable[$key] = $schedule; 
      } 
     } 
    } else { 
     $schedulesAvailable = $schedules; 
    }  

    return $schedulesAvailable; 
} 

schedules.php

public function search() 
{ 

    $this->data['pageTitle'] = 'Schedule Search'; 
    $this->data['pageDisplayedTitle'] = 'Schedule Search'; 

    $available = (bool) $this->input->post('available'); 

    $this->data['schedules'] = $this->Schedules->getFilteredSchedule($available, $this->input->post('departureICAO'), $this->input->post('arrivalICAO'), $this->input->post('aircraftId')); 

    $airportsList = $this->Airports->getAllAirports(TRUE, TRUE); // Get set of all active airports 
    $aircraftsList = $this->Aircrafts->getAllAircrafts(TRUE, TRUE); // Get set of all active airports 

    // Prepare form inputs 
    $this->data['departureICAO'] = array(
     'name' => 'departureICAO', 
     'id' => 'departureICAO', 
     'selected' => $this->input->post('departureICAO'), 
     'options' => $airportsList, 
    );  
    $this->data['arrivalICAO'] = array(
     'name' => 'arrivalICAO', 
     'id' => 'arrivalICAO', 
     'selected' => $this->input->post('arrivalICAO'), 
     'options' => $airportsList, 
    ); 
    $this->data['aircraftId'] = array(
     'name' => 'aircraftId', 
     'id' => 'aircraftId', 
     'selected' => $this->input->post('aircraftId'), 
     'options' => $aircraftsList, 
    ); 
    $this->data['available'] = array(
     'name' => 'available', 
     'id' => 'available', 
     'checked' => set_checkbox('available', $this->input->post('available'), FALSE), 
     'value' => TRUE, 
    ); 

    $this->load->view('schedules/scheduleSearch', $this->data); 
} 

Я попытался отладки все и следуя процесс шаг за шагом, а также методом проб и ошибок, но ни один поддавки ожидаемые эффекты. Есть идеи?

ответ

0

методом проб и ошибок. Я нашел какую-то работу вокруг, и некоторые из них работают. Если у кого-то есть какие-либо предложения относительно этого или как я могу его улучшить, пожалуйста, не стесняйтесь, поскольку я ищу производительность в приложении.

Необходимые изменения были в модели:

public function getFilteredSchedule($available, $departureICAO, $arrivalICAO, $specificAircraftId) 
{ 
    $this->db->select('*'); 

    if($departureICAO != FALSE) { 
     $this->db->where('departureICAO', $departureICAO); 
    } 
    if($arrivalICAO != FALSE) { 
     $this->db->where('arrivalICAO', $arrivalICAO); 
    } 
    if($specificAircraftId != FALSE) { 
     $this->db->where('aircraftId', $specificAircraftId); 
    } 

    $schedules = $this->db->where('active', 1) 
        ->order_by('id', 'asc') 
        ->get('schedules') 
        ->result_array(); 

    $schedulesAvailable = array(); 

    // Check if any of the filters is required 
    if(!$this->RebuildVA->mustBeAtDepartureAirport() && $this->RebuildVA->allowMultipleAircraftBookings() && $this->RebuildVA->allowMultiplePilotBookings()) { 
     $schedulesAvailable = $schedules; 
    // Check if only bookable flights has been checked 
    } elseif($available === TRUE) { 
     foreach($schedules as $key => $schedule) { 

      // Allow multiple schedule bookings 

      // Check if the aircraft must be at departure airport 
      if($this->RebuildVA->mustBeAtDepartureAirport()) { 
       if($this->Aircrafts->isAtAirport($schedule['aircraftId'], $schedule['departureICAO'])) { 
        $schedulesAvailable[$key] = $schedule; 
       } else { 
        // Check if use of other aircraft of same type is allowed 
        if($this->RebuildVA->allowOtherAircraftUse()) { 
         if($this->Aircrafts->aircraftTypeAtAirport($schedule['aircraftId'], $schedule['departureICAO'])) { 
          $schedulesAvailable[$key] = $schedule; 
         } else { 
          unset($schedulesAvailable[$key]); 
          continue; 
         } 
        } else { 
         unset($schedulesAvailable[$key]); 
         continue; 
        } 
       } 
      } else { 
       if(isset($schedulesAvailable[$key])) { 
        $schedulesAvailable[$key] = $schedule; 
       } 
      } 

      // Check if there is a limit of only one booking at time per aircraft 
      if(!$this->RebuildVA->allowMultipleAircraftBookings()) { 
       if(!$this->Aircrafts->isBooked($schedule['aircraftId'])) { 
        $schedulesAvailable[$key] = $schedule; 
       } else { 
        unset($schedulesAvailable[$key]); 
        continue; 
       } 
      } else { 
       if(isset($schedulesAvailable[$key])) { 
        $schedulesAvailable[$key] = $schedule; 
       } 
      } 

      // Check if there is a limit of only one booking at time per pilot 
      if(!$this->RebuildVA->allowMultiplePilotBookings()) { 
       if(!$this->Pilots->hasBookedFlight($this->session->userdata('pilotId'))) { 
        $schedulesAvailable[$key] = $schedule; 
       } else { 
        unset($schedulesAvailable[$key]); 
        continue; 
       } 
      } else { 
       if(isset($schedulesAvailable[$key])) { 
        $schedulesAvailable[$key] = $schedule; 
       } 
      } 
     } 
    } else { 
     $schedulesAvailable = $schedules; 
    }  

    return $schedulesAvailable; 
} 
Смежные вопросы