ThinkPHP 8.1.4 版本正式发布,此次更新不仅全面兼容 PHP 8.5,还带来了核心框架和 ORM 的多项功能改进与问题修复,进一步提升了框架的稳定性和开发体验。同时,这也为 2025 年的工作画上了一个句号,期待新的一年更多新特性的引入。
核心更新
🚀 核心功能增强
-
Config类优化
- 改进 hook 方法,增加 key 参数支持
- 调整 lazy 方法实现,提升配置加载效率
-
路由系统改进
- 修正路由 URL 生成逻辑
- 路由绑定到命名空间支持控制器后缀
- 改进路由分组的 URL 有效性检查
- 优化路由中间件传参机制
-
请求响应优化
- 改进 Request 类功能
- 增强 Response 类 send 方法的异常处理能力
- 改进 HttpEnd 错误日志记录
🔧 兼容性与性能
-
PHP兼容性
- 全面兼容 PHP 8.5 版本
- 调整 "psr/http-message" 依赖,增加 "^2.0" 支持
-
缓存与日志
- 改进 Redis 缓存驱动性能
- 优化日志文件删除顺序
- 提升日志处理效率
🛠️ 开发工具增强
-
新增命令行工具
-
代码质量
- 优化 PHP CS Fixer 配置规则
- 提升代码规范性和可维护性
ORM更新
同时,ThinkORM 4.0 也带来了大量的优化和改进。
性能优化
- 引入
LazyCollection 惰性数据集,大幅减少内存占用
chunk 方法使用 lazy 重写,提升大数据量处理性能
- 关联预载入查询使用
cursor 减少内存开销
- 改进 lazy 方法对
distinct 的处理
- 改进 toarray 方法的
append 处理,支持 relation.attr 方式
- 优化 Json 字段解析效率
LazyCollection 类增加 page 方法简化数据处理
- 改进
cursor 方法支持关联查询
- 改进关联预载入查询的
limit 方法
- 优化 PDOConnection 类
query 和 execute 方法,不依赖 Query
视图模型功能完善
- 完整的视图模型生命周期支持(查询、验证、写入)
- 支持自动关联查询和写入
- 独立的查询范围和搜索器
- JSON 字段映射和类型转换
- 视图模型支持
update 和 create 方法调用并返回当前视图模型
- 视图模型增加
clear、reflesh、validate、data 等方法
- 视图模型默认支持写入,除非
readonly 为 true(原 allowWrite 参数废弃)
- 改进视图模型的自动关联查询,不依赖
autoMapping 定义,会自动检测关联映射
- 优化视图模型的查询条件处理,可以自动根据视图模型的属性查询,会自动关联查询
- 视图模型查询排序字段支持映射
- 改进视图模型多级子关联映射问题
- 改进视图模型的嵌套关联数据写入
- 改进视图模型的获取器调用
- 改进视图模型支持基础类参数定义
- 改进视图模型的
data 方法支持原有属性和传入对象
- 改进视图模型的一对多关联写入
- 改进视图模型的
create、update、save、saveAll 等方法
- 改进视图模型的自动数据验证,支持字段映射
- 视图模型增加
validate_mapping_data 配置,用于设置是否验证映射后的数据
数据库连接增强
connect 方法支持数组配置
- 数据库驱动增加时区设置,统一使用
timezone 参数配置
- PostgreSQL 驱动完善,使用标准系统表查询字段信息
- 完善
pgsql 驱动支持获取字段注解内容
- 增加
after_connect 事件
- 数据库
numberic 类型视为字符串类型处理
关联查询功能增强
- 一对多关联增加
first 和 last 方法
- 一对一关联增加
firstOfMany 和 lastOfMany 方法
- 改进
hasWhere 查询条件支持更多的数组用法
- 改进关联写入支持 JSON 字段映射
- 修正
belongsTo 关联的 hasWhere 方法
模型功能增强
- 模型增加
scene 方法,用于设置自动验证的场景
- 模型和实体模型增加基础配置定义方法
getBaseOptions()
- 模型增加
setAttrs、getAutoInc 等方法
- 改进模型的
suffix 方法调用处理
- 调整
getPk 方法支持没有主键的表
- 模型类和数据集对象增加
toView 方法
- 改进
autoWriteData 方法对于手动写入的自动写入时间字段不再生成
- 改进模型的
destory 方法增加 together 参数
- 改进 Model 类
get 方法
- 改进 Model 类
__isset、__unset、__unserialize 方法
- 去掉 Model 类的
autoinc 处理
- 改进实体模型和视图模型的
newInstance 和 setModel 方法
- 改进视图模型的
clone、refresh 方法
- 改进视图模型的查询字段自动识别
查询功能改进
- 增加
lazy 惰性查询方法
- 优化预载入关联查询使用
lazy 方法
- 增加
stream 流式处理方法,支持流式回调
- 改进
hasWhere 的查询条件,支持更多的数组用法
- 改进 join 查询方法的多次调用
- 改进
parserOrder 方法支持 json 字段排序
- 改进
getOrigin 方法增加类型转换参数
问题修复
- 修正
DateTime 类关闭时间格式化后的问题,支持写入 null
- 修正软删除功能
- 修正
chunk 方法主键不存在的情况查询出错问题
- 修正 OptimLock 的
getDbWhere 方法参数默认值
- 修正
order 方法传数组的别名问题
- 修复
chunk 查询中断问题
- 修复
mongo 游标查询问题
- 修正修改器的 data 参数
- 改进
update 方法的刷新数据
安装与升级
全新安装
composer create-project topthink/think tp
升级现有项目
composer update topthink/framework
注意事项
- 本次更新为常规维护版本,保持向下兼容
- 建议在测试环境中验证后再部署到生产环境
- 如遇到任何问题,请访问官方文档或提交 Issue
致谢
感谢所有为 ThinkPHP 贡献代码的 Tper 们!是你们的支持让 ThinkPHP 框架不断进步,让开发变得更简单一直都是我们秉承的原则。官方计划在下一个版本引入一些更激动人心和增加开发体验的新特性。
官方资源
想了解更多后端开发技术和框架更新,欢迎访问 云栈社区 进行交流学习。
|