2013-12-26 3 views
0

Я пытаюсь навсегда получить поиск, работающий над jqgrid. В онлайн-примерах нет примера контроллера для реализации стороны контроллера поиска. Посмотрев на другие случайные сообщения в Интернете, я попытался адаптировать свою логику к моей ситуации. Пришел к этому внутри моего контроллера данных сеткиjqgid search controller implementation - PHP (codeigniter)

Все критерии поиска доступны мне через $ фильтры переменная. Внутри первого цикла цикла я могу получить к ним доступ, как $ item ['field'];, $ item ['op']; и $ item ['data'];. Как есть, все, что я возвращаюсь с сервера, это grouptype_id = '23'

Я просто не знаю, как динамически генерировать предложение where для моего запроса codeigniter. Пожалуйста, порекомендуйте.

if($this->input->get('_search')=="true"){ 
    $where = "";  
    $ops = array(
      'eq'=>'=', 
      'ne'=>'<>', 
      'lt'=>'<', 
      'le'=>'<=', 
      'gt'=>'>', 
      'ge'=>'>=', 
      'bw'=>'LIKE', 
      'bn'=>'NOT LIKE', 
      'in'=>'LIKE', 
      'ni'=>'NOT LIKE', 
      'ew'=>'LIKE', 
      'en'=>'NOT LIKE', 
      'cn'=>'LIKE', 
      'nc'=>'NOT LIKE' 
     ); 
     $filters = json_decode($this->input->get('filters'), true);    
     foreach ($filters['rules'] as $item){ 
      $searchField = $item['field']; 
      $searchOper = $item['op']; 
      $searchString = $item['data']; 

      foreach ($ops as $key => $value) { 
       if ($item['op'] == $key) { 
        $ops = $value; 
       } 
      } 
      if ($searchOper == 'eq') 
       $searchString = $searchString; 
      if ($searchOper == 'bw' || $searchOper == 'bn') 
       $searchString .= '%'; 
      if ($searchOper == 'ew' || $searchOper == 'en') 
       $searchString = '%' . $searchString; 
      if ($searchOper == 'cn' || $searchOper == 'nc' || $searchOper == 'in' || $searchOper == 'ni') 
       $searchString = '%' . $searchString . '%';    
      $where = "$searchField $ops '$searchString' "; 
     }     
     echo $where; 

    }//end if part 

ответ

0

В интересах тех из вас, кто приземляется здесь, в поисках рабочей реализации. Следующий код работает для каждого критерия поиска независимо от его сложности. Я использую Codeigniter, только для записи.

if($this->input->get('_search')=="true"){ 
    $where = "";  
    $ops = array(
      'eq'=>'=', 
      'ne'=>'<>', 
      'lt'=>'<', 
      'le'=>'<=', 
      'gt'=>'>', 
      'ge'=>'>=', 
      'bw'=>'LIKE', 
      'bn'=>'NOT LIKE', 
      'in'=>'LIKE', 
      'ni'=>'NOT LIKE', 
      'ew'=>'LIKE', 
      'en'=>'NOT LIKE', 
      'cn'=>'LIKE', 
      'nc'=>'NOT LIKE' 
     ); 
     $filters = json_decode($this->input->get('filters'), true); 
     $first = true;    
     foreach ($filters['rules'] as $item){         
      $where .= $first ? " WHERE" : " AND "; 
      $searchString = $item['data']; 
      if($item['op'] == 'eq') $searchString = "'".$searchString."'"; 
      if($item['op'] == 'bw' || $item['op'] == 'bn') $searchString = "'".$searchString."%'"; 
      if($item['op'] == 'ew' || $item['op'] == 'en') $searchString = "'%".$searchString."'"; 
      if($item['op'] == 'cn' || $item['op'] == 'nc' || $item['op'] == 'in' || $item['op'] == 'ni') $searchString = "'%".$searchString."%'";       
      $where .= " ".$item['field']." ".$ops[$item['op']]." ".$searchString;     
      if ($first) { 
       $first = false; 
      }        
     } 
     $sql = "SELECT * FROM applicant".$where; 
     $query = $this->db->query($sql); 
     $result = $query->result_array(); 
     $i=0;    
     foreach ($result as $myrow){ 
      $responce->rows[$i]['id']=$myrow['id']; 
      $responce->rows[$i]['cell']=array($myrow['id'],$myrow['contingent_id'],$myrow['firstname'],$myrow['lastname'],$myrow['age'],$myrow['grouptype_id'],$myrow['registrationtype_id']); 
      $i++; 
     }               
    }