这是我的模特:
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。我错过了什么吗?谢谢你的帮助。
答案 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命令。这比连接函数本身提供了更好的控制。