[英]Codeigniter return result and row
在 Model class 我使用return $query->row();
返回单行并return $query->result();
返回多行时。
在单个页面上,我必须从 2 个单独的表中返回单行和多行。
表users
包含一般信息,如用户名、全名和 email 地址。 表user_links
包含各个用户提交的链接,并且每个用户都有多行。
我的查询
$this->db->select('*');
$this->db->from('users');
$this->db->join('user_links', "user_links.user_id = users.user_id");
$this->db->where('users.user_id', $user_id);
$this->db->where('user_links.user_id', $user_id);
$query = $this->db->get();
return $query->row();
在我的 controller 中,我在视图中加载查询
$data['row'] = $this->User_model->user_read($user_id);
,
$user_id
是包含唯一用户 ID 的第三个 URL 段。
最后,在我看来,我通过echo $row->first_name;
检索行。
这适用于单行,但如何为用户链接创建一个foreach
循环? 目标是避免单行循环并将它们仅用于检索多行。
这是伪代码,但你可能可以做这样的事情
$this->db->select('*');
$this->db->from('users');
$this->db->join('user_links', "user_links.user_id = users.user_id");
$this->db->where('users.user_id', $user_id);
$this->db->where('user_links.user_id', $user_id);
$query = $this->db->get();
if ($query->num_rows() == 1)
{
return $query->row();
}
elseif ($query->num_rows() > 1)
{
return $query->result_array(); //This returns an array of results which you can whatever you need with it
}
else
{
//Add some logic to handle if there are zero results
}
很难说出你想要什么。
您需要一个 function 来检查您是否传递了row()
或result()
并相应地处理它们。
在我看来,如果您只是将所有内容作为result()
。 并检查该集合是否为空以向用户显示一条好消息。
如果我正确理解您的问题,您希望通过单个查询同时获取用户数据和 user_links 数据,同时避免遍历它来获取用户数据。 虽然这可能使用 result_array,但我建议不要这样做,因为当 user_links 中没有该特定用户的条目时,您将获得 0 个结果。
我的建议是您使用两个查询,一个从 user 表中获取用户,另一个从 user_links 表中获取用户的链接。 这也将帮助您避免连接。
听起来您正在寻找 CI 的 Active Record 已经提供的其他一些功能: http://codeigniter.com/user_guide/database/results.html
对于您正在做的事情,听起来使用内置的 function result_array 会起作用。 你像这样使用它:
取自以上链接
$query = $this->db->query("YOUR QUERY");
foreach ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
您可以替换这一行:
$this->db->join('user_links', "user_links.user_id = users.user_id");
有了这个:
$this->db->join('user_links', "user_links.user_id = users.user_id", 'left outer');
加入 codeigniter 默认使用INNER JOIN
,但在某些情况下,如果user_links
中没有数据,它不会返回任何内容,因此您可以在框架 CI 中使用LEFT JOIN
,就像我上面提到的那样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.