我正在构建一个涉及JOIN的查询。这是我第一次用Active Record完成数据库的工作,并且遇到了一些问题。JOIN语句中的CodeIgniter ActiveRecord字段名称
我想加入的表中调用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';
这是伟大的,但如果我这样做,在活动记录我认为这是实践中相当差,如果它工作的话。
我想我可能不得不诉诸这一点,但我并不确定自己能够选择那样。我如何给我的例子表格添加别名,比如' - > get('user AS u')'?这是否与所有activerecord数据库目标兼容? – deed02392 2012-04-06 20:46:04
@ deed02392检查,更新代码 – safarov 2012-04-06 20:54:26
好吧,就像我想的那样。 'AS'运算符是标准的SQL权限,它在所有db语言中设置别名?或者这只能在certiain db中工作。 – deed02392 2012-04-07 11:35:06