如何获取CodeIgniter 4查询的筛选后记录总数?
如何获取CodeIgniter 4查询的筛选后记录总数?
嘿,我看你当前的代码里有个小问题——你用$model->countAllResults()是拿不到正确的筛选后记录数的,一方面是调用顺序的问题,另一方面这个方式没和你之前给builder加的筛选条件正确关联上。
给你两种可行的调整方案,你可以根据习惯选:
- 方案一:用Query Builder统一操作
$model = new LocationModel(); $builder = $model->builder(); if($filterName != "" && $filterValue != "") { $builder->where($filterName, $filterValue); } // 先获取筛选后的记录总数 $data['recordCount'] = $builder->countAllResults(); // 再获取符合条件的列表数据 $data['locations'] = $builder->get()->getResult();
- 方案二:直接通过Model操作,更简洁
$model = new LocationModel(); if($filterName != "" && $filterValue != "") { $model->where($filterName, $filterValue); } // 传false是告诉框架不要重置查询条件,这样后面的findAll()能复用同一筛选 $data['recordCount'] = $model->countAllResults(false); // 获取筛选后的列表数据 $data['locations'] = $model->findAll();
这里要划个重点:countAllResults()默认执行后会重置当前的查询条件,如果你要在统计总数后继续用同一个筛选条件查询列表,一定要给它传false参数,这样就不会丢失之前加的where条件啦。
内容来源于stack exchange




