Codeigniter中用于数据表的PostgreSQL列转换

时间:2018-08-28 17:14:41

标签: postgresql codeigniter codeigniter-3

我目前正在开发一个Codeigniter 3项目,该项目具有使用数据表的实时搜索值,该项目在MySQL上运行,并且一切正常,必须迁移到PostgreSQL,现在搜索不起作用,因为需要在ID列中添加显式类型转换,这是错误:错误:运算符不存在:整数~~文本。

我想出了办法,在列名后添加了 :: varchar ,然后在PHPpgadmin上直接键入Query进行了测试,但它确实有效,但是我找不到我能做到的在CI代码中执行此操作

这是代码

$datatable->db_search(array(
        "consultas.nombre",
        "usuarios.username",
        "u2.username",
        "consultas.guest_email",
        "consultas.last_reply_string",
        "consultas.ID",
    )
);

db_search函数

public function db_search($columns) 
{
    if(!empty($this->search)) {
        if($this->search_type == 0) {

            // Search all columns for likeness
            $words = explode(" ", $this->search);
            $this->CI->db->group_start();
            foreach($words as $word) {
                foreach($columns as $field) {
                    $this->CI->db->or_like($field, $word);
                }
            }
            $this->CI->db->group_end();

        } elseif($this->search_type == 1) {

            // Search all colums for likeness for whole string
            $this->CI->db->group_start();
            foreach($columns as $field) {
                 $this->CI->db->or_like($field, $this->search);
            }
            $this->CI->db->group_end();

        } else {

            // Search for each individual column. 
            // First 2 indexes are reserved for above
            if(isset($columns[$this->search_type-2])) {
                $this->CI->db->group_start();
                $this->CI->db->or_like($columns[$this->search_type-2],  $this->search);
                $this->CI->db->group_end();
            }
        }
    }
}

已经尝试:

"consultas.ID::varchar"

"'consultas.ID', '1011%'"

2 个答案:

答案 0 :(得分:0)

使oraslike FALSE的第三个参数成为Consultas.ID。

if($field == 'consultas.ID')
{
$this->CI->db->or_like($field, $word, FALSE);
}
else{
$this->CI->db->or_like($field, $word);
}

答案 1 :(得分:0)

您需要避免在要投射的列中转义。

通常QueryBuilder方法的最后一个参数是用于转义,可以为true或false(默认值:true,请勿转义)

$this->CI->db->or_like($field, $word, false); // <-- false, do not escape

在这里查看我对类似问题的回答: type "e" does not exist , Redshift through Postgresql connector in php codeigniter


尝试以这种方式投射

CAST(consultas.ID as TEXT);