thinkphp 6.0.16升级至6.1.5需关注四点:database.php中type字段须全小写;app.php中default_timezone优先级提升并影响时间戳;schema缓存路径变更为runtime/schema/{连接名}/{配置名}.php;中间件推荐使用类常量而非字符串声明。

ThinkPHP 6.0.16 升级到 6.1.5 属于小版本迭代,官方承诺保持向下兼容,但实际项目中仍需关注几处关键配置项和行为变更——这些变化不报错、不易察觉,却可能引发缓存失效、路由异常或数据库字段映射错误。
config/database.php 中 type 字段必须全小写
TP6.1 开始强化驱动识别的大小写敏感性。虽然 6.0.16 允许 MySQL、mysql、Mysql 混用,但 6.1.5 仅接受全小写驱动标识:
- ✅ 正确写法:
'type' => 'mysql'、'type' => 'pgsql'、'type' => 'sqlite' - ❌ 错误写法:
'type' => 'MySQL'会触发Driver [MySQL] not supported - 注意:该检查在
thinkdbConnection初始化阶段执行,不是运行时报错,而是首次 Db 查询时静默失败(返回 null 或空数组)
config/app.php 的 default_timezone 配置优先级提升
TP6.1.5 调整了时区初始化时机,default_timezone 不再仅用于日志和时间助手函数,还直接影响模型自动时间戳(create_time/update_time)的写入值:
- 若未显式设置,框架默认使用
date_default_timezone_get()(常为 UTC),可能导致数据库中时间比本地晚 8 小时 - 建议统一设为:
'default_timezone' => 'Asia/Shanghai' - 该配置会覆盖
.env中的APP_TIMEZONE,除非你在app.php中用env('APP_TIMEZONE', 'Asia/Shanghai')显式读取
runtime 缓存结构微调:schema 缓存路径变更
TP6.1.5 优化了字段缓存生成逻辑,php think optimize:schema 命令生成的缓存文件不再写入 runtime/schema/,而是按连接名分目录存放:
- 旧路径(6.0.16):
runtime/schema/mysql.php - 新路径(6.1.5):
runtime/schema/mysql/default.php(default是 database.php 中 connection 的键名) - 升级后若发现
Db::table()->find()返回 null 或字段缺失,先检查该路径是否存在;若无,重新执行php think optimize:schema - 多数据库项目需为每个 connection 单独运行命令:
php think optimize:schema --connection=slave
中间件注册方式兼容但推荐显式声明
TP6.1.5 未改变中间件机制,但增强了提示逻辑。若在 app/middleware.php 中返回类名字符串(如 CheckAuth::class),框架会自动实例化;但若类构造函数依赖容器注入参数,建议改用闭包或数组语法:
- ✅ 推荐写法:
return [AppMiddlewareCheckAuth::class]; - ⚠️ 可用但不推荐:
return ['app\middleware\CheckAuth'];(易因命名空间大小写或反斜杠问题失效) - 注意:路由级中间件绑定(
Route::get(...)->middleware(...))行为完全一致,无需修改
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











