JOIN语句中的CodeIgniter ActiveRecord字段名称

时间:2012-04-06 16:25:01

标签: php codeigniter activerecord

我正在构建一个涉及JOIN的查询。这是我第一次使用Active Record完成数据库操作,我遇到了一些麻烦。

我想将一个名为companies的表加入users表,这样我就可以得到用户所在公司的名称等等。我已经成功完成了这样的事情:< / p>

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中的字段idname在该对象中返回,简称为name

通常,当我编写原始查询时,我会给表提供别名,结果类似于u.company_idc.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 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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();`

`