Codeigniter 查询搜索用户提供的短语中的任何单词[重复]

问题描述 投票:0回答:1

我已经编写了一些代码来在CodIgniter3框架中进行搜索。当我插入 2 个或更多单词来搜索输入时,它效果很好,但是,当我只输入 1 个单词时,它会出现此错误。

enter image description here

如何解决这个问题? 这是我的控制器:

function search() {
    $keyword = strip_tags($this->input->get('searchforcourses'));
    $keyword = explode(" ", $keyword);

    $data['title'] = 'Bütün Kurslar Burada';
    $data['courses'] = $this->courses_model->courses_search($keyword);

    $this->load->view('templates/header');
    $this->load->view('courses/courses', $data);
    $this->load->view('templates/footer');
}

这是我的模型:

function courses_search($keyword) {
    $this->db->select('*');
    $this->db->from('courses');
    $this->db->like('title',$keyword[0]);
    $this->db->or_like('title',$keyword[1]);
    $this->db->join('instructors', 'instructors.id = courses.instructor_id', 'left');
    $this->db->join('categories', 'categories.id = courses.category_id', 'left');
    $query = $this->db->get();
    return $query->result_array();
}
php codeigniter activerecord sql-like query-builder
1个回答
1
投票

该错误意味着您正在尝试访问不存在的密钥

1
,您的代码在模型级别上是错误的,您的代码仅获取两个关键字,如果用户搜索三个关键字怎么办?你就打算忽略他们吗?

我建议这样做:

function courses_search($keyword) {
    $this->db->select('*');
    $this->db->from('courses');
    // You should consider limiting the number of keywords to avoid long loops
    // Limits to 20 keywords
    $keyword = array_slice($keyword, 0, 19);
    // You can also limit it in the 3rd parameter of the explode function
    // Loop through the keywords
    forearch($keyword as $key){
        $this->db->or_like('title',$key);
    }
    $this->db->join('instructors', 'instructors.id = courses.instructor_id', 'left');
    $this->db->join('categories', 'categories.id = courses.category_id', 'left');
    $query = $this->db->get();
    return $query->result_array();
}
© www.soinside.com 2019 - 2024. All rights reserved.