codeigniter 4 的 crud 应依托 model、controller 和 query builder 三层协作,禁用手写 sql;model 封装数据逻辑并提供自动时间戳、验证及软删除;controller 仅调度不处理业务;路由配合表单实现闭环;需启用调试、字段白名单与事务保障安全稳定。

CodeIgniter 4 的 CRUD 集成不靠堆代码,靠结构清晰 + 框架原生能力。核心是用好 Model、Controller 和 Query Builder 三层协作,避免手写 SQL 或绕过模型直接操作数据库。
用标准模型封装数据逻辑
CI4 的 Model 是 CRUD 的中枢,不是可选层,而是推荐起点。继承 CodeIgniter\Model 后,自动获得 insert()、update()、delete()、find() 等方法,还支持软删除、时间戳自动填充、验证规则绑定。
- 在 app/Models 下新建类,如 UserModel.php,声明表名、主键、时间字段
- 启用自动时间戳:设置
$useTimestamps = true,框架会在插入/更新时自动写入created_at和updated_at - 验证可直接集成:在 Model 中定义
$validationRules,调用save()前会自动校验 - 避免用
$db->table()->set()->update()这类底层写法——它跳过模型生命周期,丢失验证、事件、回调等关键能力
控制器只做调度,不做业务处理
Controller 的职责是接收请求、调用服务或模型、返回响应。不拼 SQL、不处理密码哈希、不写事务逻辑。
- 从请求中提取数据后,直接传给 Model 方法:
$this->userModel->insert($data)或$this->userModel->update($id, $data) - 批量操作用
insertBatch()或updateBatch(),比循环调用高效得多 - 查询带条件?用链式写法:
$this->userModel->where('status', 'active')->orderBy('name')->findAll() - 需要关联查询?Model 支持
with()方法(需开启$allowedFields并配置关联关系)
路由与表单配合实现快速增删改
CI4 的路由系统能大幅简化 URL 映射,配合表单提交即可形成闭环流程。
- 资源路由一键生成 CRUD 路由:
$routes->resource('users')会自动注册 /users、/users/new、/users/1/edit 等路径及对应方法 - 表单提交用 POST,更新用 PUT/PATCH —— CI4 默认支持伪方法(通过 _method 字段),无需额外配置
- 单选按钮、复选框等表单元素值,直接用
$this->request->getPost('field_name')获取,Model 会自动过滤和类型转换 - 重定向后携带提示信息:
return redirect()->back()->with('success', '更新成功'),视图中用session()->get('success')显示
调试与安全别跳过基础项
快速不等于粗糙。几个关键点直接影响稳定性和可维护性。
- 开发阶段务必开启
database.db_debug = true,SQL 错误会直接显示,省去猜错成本 - 所有用户输入必须进 Model 的
$allowedFields白名单,防止 Mass Assignment 漏洞 - 敏感操作如删除加确认机制,前端用 JS 提示,后端 Controller 再次校验权限或状态
- 事务用
$this->userModel->skipValidation()->transStart()包裹多步操作,失败则回滚











