Я создаю запрос с участием JOIN. Это первый раз, когда я сделал db-файл с Active Record, и я немного ударил.Имена полей CodeIgniter ActiveRecord в инструкции JOIN
Я хочу присоединиться к столу под названием 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';
, который является большим, но если бы я попытался сделать это в активной записи я считаю, что это очень плохая практика , если он вообще работает.
Я думал, что, возможно, мне придется прибегнуть к этому, но я не был уверен, что смогу так выбрать. Как мне дать псевдонимы таблицам, как мой пример, что-то вроде '-> get ('user AS u')'? Будет ли это совместимо со всеми целями базы данных activerecord? – deed02392
@ deed02392 проверить, обновленный код – safarov
ОК, как я и думал. Оператор «AS» является стандартным правом SQL, он устанавливает псевдоним на всех языках db? Или это будет работать только в certiain db. – deed02392