18

我正在构建一个涉及 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;
}

但是,问题在于 中的字段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';

这很好,但如果我试图在活动记录中这样做,我认为这是非常糟糕的做法,如果它真的有效的话。

4

2 回答 2

43

如果要从表中选择某些特定列,请使用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();
于 2012-04-06T17:50:37.957 回答
-1
$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();`

`

于 2019-02-05T16:29:22.557 回答