我在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,所以请帮帮我,我可能错过了最简单的解决方案,但我看不到它。
答案 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
}