Приведение столбцов PostgreSQL в Codeigniter для таблиц данных - PullRequest
0 голосов
/ 28 августа 2018

В настоящее время я работаю над проектом Codeigniter 3, который имеет значения поиска в реальном времени с использованием таблиц данных, проект был на MySQL и все работало нормально, и его нужно перенести на PostgreSQL, и теперь поиск не работает, потому что это необходимо чтобы добавить явное приведение типов в столбец ID, это ошибка: ОШИБКА: оператор не существует: целое число ~~ текст.

Я понял, как это сделать, добавив :: varchar после имени столбца de, и я протестировал его, введя запрос непосредственно в PHPpgadmin, и он работает, но я не могу найти, как именно я могу это сделать это в коде 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 голосов
/ 30 августа 2018

Вам нужно избегать экранирования в тех столбцах, которые вы читаете.

Обычно последний параметр для методов QueryBuilder предназначен для экранирования, который может иметь значение true или false (по умолчанию: true, DO escape)

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

Смотрите мой ответ здесь на похожий вопрос: типа "e" не существует, Redshift через разъем Postgresql в php codeigniter


Попробуйте разыграть этот путь

CAST(consultas.ID as TEXT);

0 голосов
/ 30 августа 2018

Сделать третий параметр or_like FALSE для consultas.ID.

if($field == 'consultas.ID')
{
$this->CI->db->or_like($field, $word, FALSE);
}
else{
$this->CI->db->or_like($field, $word);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...