Codeigniter返回结果和行

时间:2011-07-06 18:30:20

标签: php mysql codeigniter

在Model类中,我使用return $query->row();返回单行,并在返回多行时使用return $query->result();

在单个页面上,我必须从2个单独的表中返回单行和多行。

users包含一般信息,例如用户名,全名和电子邮件地址。 表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(); 

在我的控制器中,我通过

在我的视图中加载查询

$data['row'] = $this->User_model->user_read($user_id);

$user_id是包含唯一用户ID的第3个网址段。

最后,在我看来,我按echo $row->first_name;

检索行

这适用于单行,但如何为用户链接创建foreach循环?目标是避免单行循环,并仅将其用于检索多行。

5 个答案:

答案 0 :(得分:5)

这是伪代码,但你可以做这样的事情

    $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
    }

答案 1 :(得分:2)

如果我正确理解您的问题,您希望通过单个查询同时获取用户数据和user_links数据,同时避免迭代它以获取用户的数据。虽然使用result_array可以实现这一点,但我建议不要使用它,因为当user_links中没有针对该特定用户的条目时,您将获得0结果。

我的建议是你使用两个查询,一个用于从用户表中获取用户,另一个用于从user_links表获取用户的链接。这也可以帮助您避免加入。

答案 2 :(得分:1)

很难说出你想要的东西。

您想要一个功能来检查您是否传递row()result()并相应地对待它们。

在我看来,如果您只是将所有内容作为result()传递,那么您的代码将更易于阅读(和维护)。并检查该集是否为空以向用户显示一条好消息。

答案 3 :(得分:1)

听起来您正在寻找CI的活动记录已经提供的一些其他功能:http://codeigniter.com/user_guide/database/results.html

对于你正在做的事情,听起来好像使用内置函数result_array会起作用。你这样使用它:

从上面的链接中获取

$query = $this->db->query("YOUR QUERY");

foreach ($query->result_array() as $row)
{
   echo $row['title'];
   echo $row['name'];
   echo $row['body'];
}

答案 4 :(得分:0)

您可以直接替换此行:

$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如上所述。