Как использовать форму поиска в codeigniter

#php #mysql #codeigniter

#php #mysql #codeigniter

Вопрос:

У меня есть две таблицы «cv» и «пользователи». Я хочу, чтобы моя форма поиска фильтровала базу данных, используя поле ‘first_name’ в users-table и поле ‘specialization’ в cv-table. Пожалуйста, помогите мне решить эту проблему, особенно в моей модели и представлении. Спасибо.

вот мой контроллер

 function search_worker()
{
    $data['query']=$this->kint_model->search_workers($this->input->post('search'));
    $this->load->view('hire_display',$data);
}
  

Вот моя модель

 function search_workers($search)
{
    //get user details from users table
    $this->db->select('*');
    $this->db->from('cv');
    $this->db->join('users', 'cv.profile_id = users.id');

    $query = $this->db->get();

    if($query->num_rows() > 0)
    {
        return $query->result();
    }

    //search for workers in hire_display view
    $query = $this->db->get_where('cv', array('first_name '=> $search))->result();

    //return $query for both queries
    return $query;
}
  

мой взгляд на форму поиска

 <?php echo form_open('kint/search_worker');

    $data = array('first_name'=>'search', 'id'=>'search');
    echo form_input($data);

    $options = array(''  => 'Select specialization', 'database' => 'database', 'webdesign'=> 'webdesign', 'networking' => 'networking');
    echo form_dropdown('specialization', $options, $this->input-post('specialization'));

    $data = array('name'=>'submit', 'id'=>'submit', 'value'=>'Search Workers');
    echo form_submit($data);
?>
  

Ответ №1:

Я полагаю, что поле «first_name» находится в таблице «users», а поле «specialization» — в таблице «cv»

 $search_first_name = trim($this->input->post('first_name'));
$search_specialization = trim($this->input->post('specialization'));

$where_condition = "u.first_name LIKE '%$search_first_name%' ";

if(!empty($search_specialization)){
    $where_condition .= " OR c.specialization LIKE '%$search_specialization%' ";
}

$this->db->select('*');
$this->db->from("users u");
$this->db->join('cv c', 'u.id = c.profile_id');
$this->db->where($where_condition);
  

И ваше «представление» было бы

 echo form_open('kint/search_worker');

echo form_input(array('name' => 'first_name', 'value' => set_value('first_name')));

$options = array(''  => 'Select specialization', 'database' => 'database', 'webdesign'=> 'webdesign', 'networking' => 'networking');
echo form_dropdown('specialization', $options, set_value('specialization'));

</form>
  

Ответ №2:

Учитывая, что специализация в таблице cv и first_name в таблице Users

вы можете выполнить свой запрос подобным образом, а также получить имя по порядку в соответствии с вашими предпочтениями

 if($this->input->post('search'))
{
$search = $this->input->post('search');            
$this->db->select('*');  // mention your field names you want to fetch
$this->db->from("users u");
$this->db->join('cv c', 'u.id = c.profile_id');
$this->db->where("u.first_name LIKE '%$search%' OR c.specialization LIKE '%$search%'");
$this->db->order('u.first_name', 'asc');   // asc or desc
$query = $this->db->get();
}