Имена полей 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
, очевидно, не может сосуществовать в результирующем наборе, поэтому можно перезаписать!
Как мы можем получить такое различие между полями, которые поступают из определенных таблиц? Или есть лучший способ переходить к объединению таблиц и работать со связанными наборами данных/объектами данных?
Edit:
Если бы я делал это как необработанный запрос, я бы сделал:
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';
Это здорово, но если я попытаюсь сделать это в активной записи, я считаю, что это довольно плохая практика, если она вообще работает.
Ответы
Ответ 1
Если вы хотите выбрать некоторые конкретные столбцы из таблицы, используйте 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();
Ответ 2
$this->db->select('ut.nombre as nombreu, ut.apellido, ru.nombre as nombrer');
$this->db->from('User_table ut');
$this->db->join('Role_usuario ru', 'ut.role_user = ru.Id');
$query = $this->db->get();'
'