CodeIgniter ActiveRecord在JOIN语句中的字段名称

8 浏览
0 Comments

CodeIgniter ActiveRecord在JOIN语句中的字段名称

我正在构建一个涉及JOIN的查询。这是我第一次使用Active Record进行数据库操作,遇到了一点问题。

我想将一个名为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表中的字段,即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';

这很好,但如果我试图在Active Record中这样做,我认为这是非常糟糕的做法,如果能够工作的话。

0