DataTables - не удается найти данные в столбце внешнего ключа, когда в CodeIgniter включена обработка на стороне сервера - PullRequest
0 голосов
/ 03 мая 2019

Я использую DataTables с обработкой на стороне сервера в CodeIgniter. Поиск включен. Все работает нормально, но я заметил, что когда я ищу данные в столбце, который содержит внешний ключ, он не возвращает данные в столбце (за исключением того, что я ищу, используя значение внешнего ключа).

Например, у меня есть таблица с названием «покупки», в которой есть поле внешнего ключа с именем «customer_id», где я сохраняю идентификатор клиента, который совершил покупку. Таблица клиентов существует в той же базе данных и имеет такие поля, как идентификатор, имя, местоположение и т. Д. В моих представлениях в столбце клиента отображается имя клиента (а не идентификатор). Однако, когда я ищу имя покупателя, которое отображается, оно не фильтрует записи, чтобы показать этого покупателя. Но когда я выполняю поиск по идентификатору клиента, он фильтрует и возвращает запись.

По сути, я хочу иметь возможность использовать customer.name, а не customer.id в поле поиска, поскольку таблица покупок, по которой я генерирую результаты DataTable, имеет только customer_id в качестве внешнего ключа для таблицы клиентов.

Это то, что у меня сейчас есть в моей модели:

var $table = 'purchases';
var $column_order = array(null, 'id', 'customer_id', 'amount', 'date', 'status'); 
var $column_search = array('id', 'customer_id', 'amount', 'date', 'status'); 
var $order = array('date' => 'desc');

private function record_query() {      
    $this->db->from($this->table);
    $i = 0; 
    foreach ($this->column_search as $item) // loop column 
    {
        if($_POST['search']['value']) // if datatable send POST for search
        {               
            if($i===0) // first loop
            {
                $this->db->group_start(); // open bracket. query Where with OR clause better with bracket. because maybe can combine with other WHERE with AND.
                $this->db->like($item, $_POST['search']['value']);
            } else {
                $this->db->or_like($item, $_POST['search']['value']);
            }
            if(count($this->column_search) - 1 == $i) //last loop
                $this->db->group_end(); //close bracket
        }
        $i++;
    }       
    if(isset($_POST['order'])) { // here order processing 
        $this->db->order_by($this->column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']);
    } else if(isset($this->order)) {
        $order = $this->order;
        $this->db->order_by(key($order), $order[key($order)]);
    }
} 

Я подозреваю, что это потому, что массив $column_search учитывает только customer_id, но я не знаю, как включить другие поля из таблицы клиентов в массив. Я не хочу сохранять имя клиента в таблице покупок, потому что это создаст много проблем в приложении. Может кто-нибудь указать мне правильное направление?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...