【问题标题】:Where to check for results?在哪里检查结果?
【发布时间】:2011-07-27 02:37:42
【问题描述】:

我在 CodeIgniter 中遇到了这个难题,检查结果的最容易出错的方法是什么。假设我有这个 sn-p 代码:

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

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

嗯,你可以在这里检查“num_rows()”,或者你可以在你的控制器或视图中检查它。对我来说,检查它的最佳位置显然是 model。但如果你这样做了,你必须在其他地方再次检查它是否包含任何内容。

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

【问题讨论】:

    标签: php model-view-controller codeigniter model


    【解决方案1】:

    从来没有一个明确的答案,因为 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());
    

    【讨论】:

      【解决方案2】:

      我建议您检查模型中的行数。如果它包含零行,则应返回 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
      }
      

      【讨论】:

      • 解释一下为什么我应该总是将它作为 result_array 返回?而不仅仅是 ->result()?
      • @toomuchcs: result_array() 返回一个数组,result() 返回一个对象。你可以使用任何你想要的。
      • 好吧,我对此感到困惑。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多