Имена полей CodeIgniter ActiveRecord в инструкции JOIN

Я создаю запрос с участием JOIN. Это первый раз, когда я сделал db-файл с Active Record, и я немного ударил.

Я хочу присоединиться к таблице, названной companies в таблицу users чтобы я мог получить имя компании и т. Д. Пользователь. Я сделал это успешно:

 function get_profile_by_username($username) { $this->db->join('companies', $this->table_name.'.company_id = companies.id'); $this->db->where('LOWER(username)=', strtolower($username)); $query = $this->db->get($this->table_name); if ($query->num_rows() == 1) return $query->row(); return NULL; } 

Однако проблема заключается в том, что поля в companies , это id и name , возвращаются в этом объекте как просто называемое name .

Обычно, когда я буду писать необработанный запрос, я бы дал псевдонимы таблицам, и результат будет похож на u.company_id , c.name . Поэтому я бы знал, что name имеет ничего общего с пользователем, но, конечно же, это название компании. И хотя это не проблема сейчас, а потенциально в будущем, столбец id явно не может сосуществовать в результирующем наборе, поэтому можно перезаписать!

Как мы можем получить такое различие между полями, которые поступают из определенных таблиц? Или есть лучший способ перейти к объединению таблиц и работать со связанными наборами данных / объектами данных?

Редактировать:

Если бы я делал это как необработанный запрос, я бы сделал:

 SELECT u.id, u.username, c.name FROM users AS u JOIN companies AS c ON c.id = u.company_id WHERE u.username = 'foobar'; 

Это здорово, но если я попытаюсь сделать это в активной записи, я считаю, что это довольно плохая практика, если она вообще работает.

Если вы хотите выбрать некоторые конкретные столбцы из таблицы, используйте db->select() . Вы можете указать псевдоним для таблиц, добавить некоторые условия и т. Д. Отправить второй параметр FALSE чтобы избежать специальных символов.

 $this->db->select('u.id, u.username, c.name', false); $this->db->from('user as u'); $this->db->join('companies as c', 'u.company_id = c.id'); $this->db->where('LOWER(u.username)=', strtolower('foobar')); $query = $this->db->get();