【问题标题】:Check if CI query has results检查 CI 查询是否有结果
【发布时间】:2014-01-18 20:36:47
【问题描述】:

我在用户帐户模型中有以下功能

public function verification_status($balpaycustid){
    $result = $this->db->where('active',1)->where('locked',0)->where('balpaycustid',$balpaycustid)->get('useraccount')->row();
    return $result;
}

这会返回下面的对象(如果有结果)

stdClass Object
(
  [id] => 3
  [verified] => 
  [active] => 1
  [locked] => 0
  [account] => 123456790
)

如果没有结果,我希望这个函数返回FALSE,尽管我不完全确定如何做到这一点。想法?

【问题讨论】:

    标签: php mysql codeigniter activerecord


    【解决方案1】:

    虽然它有点使您的方法有点膨胀,但您可以在返回之前使用num_rows 检查是否有结果。

    类似的东西:

    public function verification_status($balpaycustid){
    
        $result = $this->db->where('active',1)->where('locked',0)->where('balpaycustid',$balpaycustid)->get('useraccount');
    
        if ($result->num_rows()) {
            return $result->row();
        } else {
            return false;
        }
    
    }
    

    【讨论】:

    • 啊酷。我希望有这样的东西。这将完美地工作。顺便说一句,我可以压缩我的多个wheres吗?
    • 是的,你可以给它发送一个数组,例如$wheres = array('active'=>1,'locked'=>0); $this->db->where($wheres)
    【解决方案2】:

    试试这个,使用num_rows() 来计算你有多少条记录

    public function verification_status($balpaycustid){
        $result = $this->db->where('active',1)->where('locked',0)->where('balpaycustid',$balpaycustid)->get('useraccount')->row();
    
        return ($result->num_rows() > 0)? 1 : 0;
    }
    

    【讨论】:

      【解决方案3】:

      要实施的改进:

      1. 这可以写成返回的单行,但是行变得有点太长了。我可能会声明一个 WHERE 条件数组以将代码保持在合理的宽度。
      2. get_where() 将接受表名作为第一个参数,然后将 WHERE 子句条件的关联数组作为单个整洁方法调用中的第二个参数。
      3. row() 将返回一个填充对象或null
      4. 由于您希望在没有生成对象时使用return false,因此只需使用null coalescing operator(PHP7.0 起可用)即可简洁地执行此转换。
      5. 实际上,没有理由额外拨打num_rows()

      建议的sn-p:

      public function verification_status($balpaycustid) {
          $conditions = ['active' => 1, 'locked' => 0, 'balpaycustid' => $balpaycustid];
          return $this->db->get_where('useraccount', $conditions)->row() ?? false;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-07-24
        • 1970-01-01
        • 2023-04-10
        • 2014-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-06
        相关资源
        最近更新 更多