繁体   English   中英

Codeigniter 返回结果和行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM