15

Вопрос по php – Имена полей CodeIgniter ActiveRecord в операторе JOIN

Я строю запрос с участием JOIN. Это первый раз, когда я сделал дб с 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';

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

2ответа

37

Если вы хотите выбрать некоторые конкретные столбцы из таблицы, используйте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();
0

$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();`

`

RelatedQuestions