CodeIgniter的ActiveRecord的字段名在JOIN语句(CodeIgniter Ac

2019-07-28 20:24发布

我建立涉及连接的查询。 这是第一次我已经做了活动记录数据库的东西,我已经打了一个有点障碍的。

我想一个表叫加入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 ,它们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';

这是伟大的,但如果我这样做,在活动记录我认为这是实践中相当差,如果在所有工作。

Answer 1:

如果你想选择表使用一些特定的列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();


Answer 2:

$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();`

`



文章来源: CodeIgniter ActiveRecord field names in JOIN statement