-1
Hello, I am developing a system where I need to perform a user filtering, and in this filtering will be used several simultaneous fields (name, Cpf, gender, age and etc.), the problem begins when I try to add a field with words-key, because I need to search in at least 3 different tables the words inserted, along with the fields mentioned above. Without using keywords, filtering works normally.
I am using the Codeigniter framework in version 3.1.10, and in models, I am using the query Builder.
I tried to create an array with the comma-separated string coming from the form, using the like ($this->db->like($array);), but it didn’t work, I also tried the group ($this->db->group_start();) and it didn’t work, which I even used in other filtering (no keywords) and works properly.
I tried to do it this way, but without success:
public function filter_candidatos($nome, $sobrenome, $cpf, $palavraChave, $funcoes, $idadeIni, $idadeFin, $sexo, $pcd, $cid, $escolaridade, $pais, $estado, $cidades, $conceito, $status){
    // FILTRO ADICIONANDO LOCALIZAÇÃO
    if(!empty($pais) || !empty($estado) || !empty($cidades)){
        $this->db->join("endereco as e", "e.id_endereco = u.id_endereco");
        (!empty($pais) ? $this->db->where("e.id_pais", $pais) : "");
        $this->db->where("e.id_estado", $estado);
        if(!empty($cidades)){
            $cidade = explode(",",$cidades);
            $this->db->where_in("e.cidade", $cidade);
        }
    }
    // FILTRO ADICIONANDO FUNÇÕES
    if(!empty($funcoes)){
        $funcao = explode(",",$funcoes);
        $this->db->join("funcao_usuario as fu", "fu.id_usuario = u.id_usuario");
        $this->db->where_in("fu.id_funcao", $funcao);
    }
    // FILTRO ADICIONANDO ESCOLARIDADE
    if(!empty($escolaridade)){
        $escolaridade = explode(",", $escolaridade);
        $this->db->where_in("u.escolaridade", $escolaridade);
    }
    // FILTRO ADICIONANDO RANGE DE IDADE
    if(!empty($idadeIni)){
        $this->db->where('u.dt_nascimento BETWEEN "'.$idadeFin.'" AND "'.$idadeIni.'"');
    }
    // FILTRO ADICIONANDO PALAVRAS CHAVE
    if(!empty($palavraChave)){ // AINDA NÃO ESTÁ ATIVO
        //$palavraChave = explode(",", $palavraChave);
        if(empty($funcoes)){
            $this->db->join("funcao_usuario as fu", "fu.id_usuario = u.id_usuario");
        }
        $this->db->join("funcao as f", "f.id_funcao = fu.id_funcao");
        $this->db->join("escolaridade as esc", "esc.id_usuario = u.id_usuario");
        $this->db->join("usuario_idioma as ui", "ui.id_usuario = u.id_usuario");
        $this->db->join("idioma as i", "i.id_idioma = ui.id_idioma");
        $palavraChave = explode(",", $palavraChave);
        $arrayFuncao = [];
        foreach($palavraChave as $palavras){
            array_push($arrayFuncao, "'f.nome' => $palavras");
        }
        var_dump($arrayFuncao);
        die();
        $this->db->or_like($arrayFuncao);
        /*$this->db->group_start();
            $this->db->where_in("f.nome", $palavraChave);
            $this->db->or_group_start();
                $this->db->where_in("esc.curso", $palavraChave);
                $this->db->or_group_start();
                    $this->db->where_in("i.nome", $palavraChave);
                $this->db->group_end();
            $this->db->group_end();
        $this->db->group_end();*/
        // campos a percorrer
        /*if( strpos(file_get_contents("texto.txt"),$_POST['palavra']) !== false) {
        echo "tem";
        }else{
        echo "não tem";
        }*/
    }
    // FILTRO BÁSICO
    $this->db->select("u.id_usuario, u.nome, u.sobrenome, u.dt_nascimento, u.pcd, u.conceito, u.dt_alteracao, u.anexo_curriculo");
    $this->db->from("usuario as u");
    $this->db->where("u.id_tipo_usuario", 3);
    $this->db->like("u.nome", $nome);
    $this->db->like("u.sobrenome", $sobrenome);
    $this->db->like("u.cpf", $cpf);
    $this->db->like("u.genero", $sexo);
    $this->db->like("u.pcd", $pcd);
    $this->db->like("u.cid", $cid);
    $this->db->like("u.conceito", $conceito);
    $this->db->like("u.status_2", $status);
    $this->db->order_by("u.nome", "ASC");
    return $this->db->get()->result_array();
}
In the researches I performed, the solutions I find always incline to use a foreach and bring the results found for each keyword, but I can’t apply this, because the filtering is not only keywords.
Someone has been through something similar, and can give me the path of stones to solve this problem?
Thanks for your attention!