Codeigniter加入数据库问题

时间:2010-02-09 10:19:18

标签: codeigniter

这是我的模特:

    function getGalleryListing()
{
    $this->db->select('photo.id,photo.src,photo.title,photo.user_id,users.id,users.username');
    $this->db->from('photo');
    $this->db->join('users', 'users.id = photo.user_id');
    $query = $this->db->get();
    return $query->result();
}

我的控制员:

    function index()
{       
    $data['gallery_list'] = $this->Gallery_model->getGalleryListing();
    $data['content'] = $this->load->view('gallery/index', $data, true);
    if ($this->dx_auth->is_logged_in()) 
    {

        $this->load->view('template_login', $data);
    }
    else
    {
        $this->load->view('template', $data);
    }

}

问题是,当我<?= $gallery->id ?>时,它会一直显示USERS.ID中的ID而不是PHOTO.ID。我错过了什么吗?谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

您正在选择两个ID(来自照片和用户),只显示后面的内容。您需要使用As的别名为其中一个ID分配不同的名称,这样它将成功显示您所需的ID。例如,您的查询应如下所示:

select (photo.id) as photo_id,photo.src,photo.title,photo.user_id,users.id,users.username from photo inner join users on users.id = photo.user_id

现在<?= $gallery->photo_id ?>会为您提供照片ID,而<?= $gallery->id ?>会为您提供用户ID。

注意:您可以在CI的视角中修改上述查询,也可以按原样使用。感谢

答案 1 :(得分:0)

我使用DataMapper OverZealous Edition
如果用户对照片声明了一对多的关系,那么您应该使用以下内容:

在用户模型中:
$this->photo->get()->all

否则类似于:
$user = $this->user->where('id', 1)->first();
$photos = $user->photo->get()->all;

另一方面,你确定这张桌子不是照片,而不是照片

答案 2 :(得分:0)

在我使用CodeIgniter的JOIN函数遇到问题的许多实例中,如果您熟悉SQL,我最终编写了自己的SQL命令。这比连接函数本身提供了更好的控制。