从不同的表中获取附加字段

时间:2013-08-16 17:21:49

标签: php codeigniter

我看到了following post,我试图以某种方式使用它来查询但是我使用了两个不同的表格。

  • 我的登录表使用了logins_model,我有用户表。
  • 在登录表内部,它仅包含登录用户所需的登录信息。
  • 我目前使用电子邮件地址作为用户使用密码字段登录的方式。
  • 在我的用户表中,它包含有关用户的所有个人信息。

我想要做的是当用户成功登录时,会将它们发送到控制面板,在那里我查询数据库的用户表以显示他们的个人信息,但是我还需要显示电子邮件地址。

我正在尝试弄清楚当我进行初始查询时如何收集该电子邮件地址字段。

这是GitHub repo for MY_Model from Jamie Rumbelow

有人对此有任何建议吗?我当然会很感激。

我希望其他人能够获得一些有关MY_Model工作知识的额外见解。

我一直在和这一天作战,并希望有人建议任何其他建议。

编辑:

我发现我可以创建一个额外的功能,但它只将电子邮件地址字段放入对象而不是带有users表中数据的电子邮件地址。有什么我做错了。

$user_data =  $this->user->with_email_address()->get_by('user_id', $user_id);

public function with_email_address()
{
    $this->db->join('logins', 'logins.user_id = users.user_id');
    $this->db->select('logins.email_address AS email_address');

    return $this;
}

2 个答案:

答案 0 :(得分:2)

您可以在用户登录时将用户电子邮件地址保存在会话变量中,而不是查询其他表。这样您就不需要多次查询数据库中的一个变量。

您可以在此处找到有关会话的其他信息:

  

http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

如果你仍然考虑使用多个查询,你可以在你的一个模型中编写一个函数,它将返回一个包含用户数据的数组。

编辑:您也可以在一个查询中加入结果,这样您只需要一个查询。 这是一个好的开始:

  

http://ellislab.com/codeigniter/user-guide/database/examples.html

答案 1 :(得分:2)

如果您要在模型中提供功能以使用电子邮件地址返回所有信息,则必须选择JOIN的所有字段。

试试这个:

public function with_email_address($user_id)
{

    $this->db->join('logins', 'logins.user_id = users.user_id');
    $this->db->select('users.*');
    $this->db->select('logins.email_address AS email_address');

    return parent::get_by('user_id', $user_id);
}