Codeigniter 4查询构造器select方法为何返回全部字段?
问题原因及解决办法
问题出在countAllResults()方法上——它会重置你之前设置的select()条件。因为countAllResults()内部会生成一个SELECT COUNT(*) FROM ...的查询,执行完成后会自动清空查询构建器里的select、limit等配置,所以后续调用get()时,相当于没有指定要查询的字段,自然返回了表中所有列。
解决方法一:给countAllResults()传入false参数
这个参数的作用是告诉查询构建器,执行完计数操作后不要重置已设置的查询条件。修改后的模型代码如下:
public function test() { $db = \Config\Database::connect(); $builder = $db->table('members'); $builder->select('mem_id'); $builder->limit(12, 0); // 传入false,避免重置查询配置 if ($builder->countAllResults(false) > 0) { $query = $builder->get(); $result = $query->getResultArray(); } else { $result = array(); } return $result; }
解决方法二:先执行查询,再判断结果行数
这种方式无需单独调用计数方法,直接获取查询结果后,用num_rows()判断是否存在数据,逻辑更简洁:
public function test() { $db = \Config\Database::connect(); $builder = $db->table('members'); $builder->select('mem_id'); $builder->limit(12, 0); $query = $builder->get(); if ($query->num_rows() > 0) { $result = $query->getResultArray(); } else { $result = array(); } return $result; }
内容的提问来源于stack exchange,提问作者Andrew S
相关产品推荐
相关产品推荐

