在哪里检查结果?

时间:2011-03-31 17:32:49

标签: php model-view-controller codeigniter model

我在CodeIgniter中遇到这个问题,因为检查结果的最容易出错的方法是什么。让我们假设我有这段代码:

    function getByUsername($username){
    $this->db->where('username',$username);
    $query=$this->db->get('user');

    if($query->num_rows() == 1)
    {
    return $query;
    }
}

好吧,你可以在这里查看'num_rows()',或者你可以在你的控制器或视图中查看它。对我来说,检查它的最佳位置显然在模型中。但如果你这样做,如果它甚至包含任何东西,你必须再在其他地方检查它。

我有点像PHP n00b,所以请帮帮我,我可能错过了最简单的解决方案,但我看不到它。

2 个答案:

答案 0 :(得分:4)

因为MVC只是一个概念,所以从来没有一个确定的答案,两者都可以在实践中运作良好。

但一般来说,这最好在模型中完成。您可以在成功时返回结果,或在失败时返回false。

您的控制器可以处理逻辑〜

if($success) {
    // do something
} else {
    // do something else
}

你可能会对此有很多意见,但没有一个是对是错。

修改

所以在你的例子中:

if($query->num_rows() == 1)
{
   return $query;
}

return false;

然后您的控制器可以是:

$data = $this->my_model->getByUsername($foo);

if($data ==false)
{
   die('There are no results!');
}

// there's results..
print_r($data ->result());

答案 1 :(得分:3)

我建议你检查模型中的行数。它包含零行,你应该返回FALSE,否则你应该从模型返回一个数组,而不是查询结果。

function getByUsername($username){
    $this->db->where('username',$username);
    $query = $this->db->get('user');

    if($query->num_rows() == 0){
        return FALSE;
    }
    return $query->result_array();
}

然后在您的控制器中,您只看到结果是否为FALSE(或数组)。

$user = $this->User_model->getByUsername('Joe');
if($user !== FALSE){
    // Valid user data
}
else{
    // No user data
}