CodeIgniter4 4.1.3调用countAllResults()返回空字符串异常问题
问题根因
- CodeIgniter 从4.1.0版本开始优化了查询构造器的状态管理逻辑:调用
get()方法执行完SELECT查询后,会自动清空当前查询构造器实例内的所有查询条件(包括select、where、表别名等配置)。你代码中先执行了$query->get()获取结果集,后续再调用countAllResults()时,构造器已经没有之前的筛选条件,返回的结果自然不符合预期。 - 4.0.4版本未严格执行查询后状态重置的逻辑,所以错误写法可以侥幸运行,4.1.3版本修复了该逻辑后就暴露了代码问题。
最优解决方案
你已经通过get()拿到了查询结果集,完全不需要额外调用countAllResults()二次查询数据库,直接统计结果集的长度即可,性能更高也不会出现版本兼容问题:
public function verificar($email, $cedula) { $query = $this->db->table('veterinario AS v'); $query->select('v.*'); $query->where('v.email', $email); $query->where('v.cedula', $cedula); $querys = $query->get()->getResult(); var_dump($querys); if (!empty($querys) && count($querys) == 1) { echo 'encontrado'; } else { echo 'noencontrado'; } }
其他场景兼容方案
如果是需要先统计总条数再获取分页数据的场景,可以给countAllResults()传false参数,禁止其执行后重置查询条件:
// 仅做通用场景示例,不适用于你的当前业务 $total = $query->countAllResults(false); // 传false保留查询条件 $paginatedList = $query->get(10, 0)->getResult();
内容的提问来源于stack exchange,提问作者Diego Armando Suarez Echanique
相关产品推荐
相关产品推荐

