Я использую 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, но я не знаю, как включить другие поля из таблицы клиентов в массив. Я не хочу сохранять имя клиента в таблице покупок, потому что это создаст много проблем в приложении. Может кто-нибудь указать мне правильное направление?