ThinkPHP 6.0.7 升级至 8.0 是架构级迁移:需清除旧 think-orm 并安装 ^3.0,模型调用改用 Db::name() 或 Model::with(),find() 不再自动过滤软删除,Elasticsearch 必须升至 ^8.0 并改用 ClientBuilder::fromConfig(),迁移工具升级为 think-migration:^4.0,fileinfo、redis、gd 等扩展版本与启用状态须严格匹配 TP8 要求。

从 ThinkPHP 6.0.7 升级到 8.0 不是版本号替换,而是架构级迁移。第三方扩展需按新环境重适配,尤其注意依赖版本、初始化方式、接口调用和生命周期钩子变化。
think-orm 必须升级到 ^3.0 并重写调用逻辑
TP8 已完全剥离 ORM 内核,think-orm 独立为 v3.x,与 TP6.0.7 使用的 2.x 不兼容:
- 先执行
composer remove topthink/think-orm清除旧版 - 再运行
composer require topthink/think-orm:^3.0 - 模型类中所有
new Model()实例化需改为Db::name('table')或使用Model::with()等新链式方法 -
find()不再自动过滤软删除数据,需显式加->withoutTrashed()或->withTrashed()
elasticsearch-php 扩展需匹配 ES 8.x SDK 规范
若项目集成 Elasticsearch,原 TP6.0.7 常用的 elasticsearch/elasticsearch:^7.0 在 TP8 下会报错:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 必须切换为
^8.0(对应 PHP 8.0+ 和 ES 8.x) - 废弃
ClientBuilder::create(),改用ClientBuilder::fromConfig()或直接new Client() - ES 8.x 默认启用安全认证,初始化时若未配置
setBasicAuthentication(),将返回 401 错误 - 验证是否加载成功:运行
php -r "echo class_exists('Elasticsearch\Client') ? 'ok' : 'fail';"
迁移命令与填充器需重新注册并调整语法
TP6.0.7 中通过 topthink/think-migration:^2.0 提供的 migrate 功能,在 TP8 下需适配新版命令体系:
立即学习“PHP免费学习笔记(深入)”;
- 卸载旧版:
composer remove topthink/think-migration - 安装新版:
composer require topthink/think-migration:^4.0(TP8 官方推荐) - 检查
config/console.php中是否注册了\think\migration\Command::class - 迁移文件中不再支持
$this->table()->addColumn()的链式写法,需改用 Schema 构建器或直接 SQL - Seeder 类中
Faker初始化方式更新,建议使用Faker\Factory::create('zh_CN')
其他常用扩展适配要点
部分高频扩展在 TP8 下行为或加载方式有变:
- fileinfo 扩展:TP8 强制依赖,部署前必须启用(宝塔面板可在 PHP 设置中一键安装)
- redis 扩展:需 ≥5.3.0 版本,否则连接池等新特性不可用
- gd 扩展:需 ≥2.3.0,否则验证码生成失败
-
第三方插件:如支付 SDK、短信组件,需确认其 composer.json 中声明支持
"php": "^8.0",否则composer install会跳过


















