我正在构建一个涉及 JOIN 的查询。这是我第一次使用 Active Record 进行数据库操作,但遇到了一些障碍。
我想加入一个名为companies
to the 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
and 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';
这很好,但如果我尝试在活动记录中这样做,我认为这是非常糟糕的做法,如果它真的有效的话。