JOIN语句中的CodeIgniter ActiveRecord字段名称

dee*_*392 17 php activerecord codeigniter

我正在构建一个涉及JOIN的查询.这是我第一次使用Active Record完成db的操作,而且我遇到了一些障碍.

我想加入一个名为表companiesusers表,所以我可以得到公司等用户中的名字,我已经做了这种成功,像这样:

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;
}
Run Code Online (Sandbox Code Playgroud)

然而问题是,在田野companies,他们idname该对象被返回简称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';
Run Code Online (Sandbox Code Playgroud)

哪个好,但是如果我试着在活动记录中做到这一点,我认为这是非常糟糕的做法,如果它可以工作的话.

saf*_*rov 39

如果要从表中选择一些特定列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();
Run Code Online (Sandbox Code Playgroud)