Поиск Codeigniter с вопросом где проблема - PullRequest
0 голосов
/ 26 февраля 2020

Я новичок в PHP и изучаю Codeigniter. У меня есть проблема, чтобы поставить где условие с моим поисковым запросом. Мой контроллер похож на ниже

public function index(){
    $data = array();

    // Get messages from the session
    if($this->session->userdata('success_msg')){
        $data['success_msg'] = $this->session->userdata('success_msg');
        $this->session->unset_userdata('success_msg');
    }
    if($this->session->userdata('error_msg')){
        $data['error_msg'] = $this->session->userdata('error_msg');
        $this->session->unset_userdata('error_msg');
    }

    // If search request submitted
    if($this->input->post('submitSearch')){
        $inputKeywords = $this->input->post('searchKeyword');
        $searchKeyword = strip_tags($inputKeywords);
        if(!empty($searchKeyword)){
            $this->session->set_userdata('searchKeyword',$searchKeyword);
        }else{
            $this->session->unset_userdata('searchKeyword');
        }
    }elseif($this->input->post('submitSearchReset')){
        $this->session->unset_userdata('searchKeyword');
    }
    $data['searchKeyword'] = $this->session->userdata('searchKeyword');

    // Get rows count
    $conditions['searchKeyword'] = $data['searchKeyword'];
    $conditions['returnType']    = 'count';
    $rowsCount = $this->member->getRows($conditions);

    // Pagination config
    $config['base_url']    = base_url().'members/index/';
    $config['uri_segment'] = 3;
    $config['total_rows']  = $rowsCount;
    $config['per_page']    = $this->perPage;

    // Initialize pagination library
    $this->pagination->initialize($config);

    // Define offset
    $page = $this->uri->segment(3);
    $offset = !$page?0:$page;

    // Get rows
    $conditions['returnType'] = '';
    $conditions['start'] = $offset;
    $conditions['limit'] = $this->perPage;
    $data['members'] = $this->member->getRows($conditions);
    $data['title'] = 'Members List';

    // Load the list page view
    //$this->load->view('templates/header', $data);
    $this->load->view('members/index', $data);
    //$this->load->view('templates/footer');
}

, а моя модель похожа на ниже

function getRows($params = array()){
    $this->db->select('*');
    $this->db->from($this->table);
    //$where = "is_verified = 1";
    //$this->db->where($where);

    if(array_key_exists("conditions", $params)){
        foreach($params['conditions'] as $key => $val){
            $this->db->where($key, $val);
        }
    }

    if(!empty($params['searchKeyword'])){
        $search = $params['searchKeyword'];
        $likeArr = array('fname' => $search, 'lname' => $search, 'gran_id' => $search);

        $this->db->or_like($likeArr);
    }

    if(array_key_exists("returnType",$params) && $params['returnType'] == 'count'){
        $result = $this->db->count_all_results();
    }else{
        if(array_key_exists("user_id", $params)){
            $this->db->where('user_id', $params['user_id']);
            $query = $this->db->get();
            $result = $query->row_array();
        }else{
            $this->db->order_by('fname', 'asc');
            if(array_key_exists("start",$params) && array_key_exists("limit",$params)){
                $this->db->limit($params['limit'],$params['start']);
            }elseif(!array_key_exists("start",$params) && array_key_exists("limit",$params)){
                $this->db->limit($params['limit']);
            }

            //$query = $this->db->get();
            $query = $this->db->where('is_verified', '1')->get();
            $result = ($query->num_rows() > 0)?$query->result_array():FALSE;
        }
    }

    // Return fetched data
    return $result;
}

Я хочу получать только записи, где

is_verified = 1

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Вы не фильтруете запрос, когда выполняется поиск, вы делаете это только вне поиска.

Попробуйте: Найти этот блок

if(!empty($params['searchKeyword'])){
     $search = $params['searchKeyword'];
     $likeArr = array('fname' => $search,'lname' => $search, 'gran_id' => $search);
     $query = $this->db->where('is_verified', '1');
     $this->db->or_like($likeArr);
}         
1 голос
/ 26 февраля 2020

Это произойдет при использовании or_like в Codeigniter, вам следует использовать функции group_start и group_end, чтобы отделить ваш поиск от условия где

if(!empty($params['searchKeyword'])){
    $search = $params['searchKeyword'];
    $likeArr = array('fname' => $search, 'lname' => $search, 'gran_id' => $search);
    $this->db->group_start(); // this will make brackets for your search query
    $this->db->or_like($likeArr);
    $this->db->group_end();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...