You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CI3查询缓存升级到CI4并复用CodeIgniter4 Active Record

CI4 复用查询条件统计总行数实现方案

CI4 已移除 CI3 中原有的 start_cache()/stop_cache()/flush_cache() 系列查询缓存方法,可通过以下两种方式实现相同的条件复用需求:

方案1:查询构造器克隆(完全对齐原有CI3逻辑,适合需要先获取全量匹配数据的场景)

// 构建基础查询条件,对应原CI3的缓存段逻辑
$baseBuilder = $this->db->table('<<items_table>>')
    ->select('<<some_items>>')
    ->where('<<condition>>')
    ->groupBy('<<group_by_condition>>')
    ->orderBy('<<order_by_condition>>');

// 克隆基础查询对象统计总行数,不会修改原对象的查询条件
$total = (clone $baseBuilder)->get()->getNumRows();

// 原基础查询对象追加limit条件后取分页数据
$listQuery = $baseBuilder->limit(10, 10)->get();
$data = $listQuery->getResultArray();
$total_per_limit = $listQuery->getNumRows();

方案2:高性能统计(推荐分页场景使用,无需拉取全量数据,性能提升明显)

// 基础查询条件构建逻辑同上
$baseBuilder = $this->db->table('<<items_table>>')
    ->select('<<some_items>>')
    ->where('<<condition>>')
    ->groupBy('<<group_by_condition>>')
    ->orderBy('<<order_by_condition>>');

// 统计总行数,传false参数不会重置已构建的查询条件
$total = $baseBuilder->countAllResults(false);

// 直接追加limit条件取分页数据
$listQuery = $baseBuilder->limit(10, 10)->get();
$data = $listQuery->getResultArray();
$total_per_limit = $listQuery->getNumRows();

注意事项

  • CI4 所有查询构造器、结果集方法已统一改为驼峰命名,原CI3的蛇形命名方法不再支持,注意对应修改
  • 若你的查询中存在having等特殊条件,优先使用克隆方案避免统计异常

内容的提问来源于stack exchange,提问作者IWannaBeMeMeMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:24:01