我目前正在开发一个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%'"
答案 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);