ThinkPHP6.1.5无法直接迁移,需重写核心结构并逐模块适配:环境需PHP≥7.2、启用必要扩展;用Composer新建项目;路由须显式注册;模型操作全面调整;推荐使用think-migration管理数据库变更。

直接迁移不可行,必须重写核心结构并逐模块适配。ThinkPHP6.1.5 与 TP5.0 在架构、生命周期、路由、模型、中间件等层面存在根本性差异,没有一键升级路径。
先确认环境与基础依赖
确保 PHP 版本 ≥ 7.2(推荐 8.0+),且已启用 openssl、pdo_mysql(或对应数据库扩展)、json、mbstring 等必要扩展。在 php.ini 中取消注释:
- extension=openssl
- extension=pdo_mysql
- extension=mbstring
使用 Composer 创建全新 TP6.1.5 项目:
composer create-project topthink/think=6.1.5 myapp
不要尝试在原 TP5 项目上覆盖升级——目录结构、自动加载、配置方式均已重构,强行替换会导致大量报错且难以调试。
立即学习“PHP免费学习笔记(深入)”;
路由与控制器需完全重定义
TP6.1.5 废弃了 TP5 的自动解析机制(如 /index/user/read 自动映射),所有路由必须显式注册到 app/route.php,且不支持闭包混写。
- 原 TP5 的
route.php中的规则全部失效,需迁移到app/route.php并改用Route::get()、Route::group()等标准语法 - URL 生成必须用数组格式:
url('index/user/read', ['id' => 1]),不再接受字符串路径 -
request()->module()、request()->controller()等方法已移除;获取当前应用名改用app('http')->getName(),获取参数统一用request()->param('key')
模型与数据库操作全面调整
TP6 的模型不再默认继承 think\Model 的“魔术”行为,字段过滤、修改器、查询判断等逻辑均需显式处理:
- 指定数据表:在模型中添加
protected $table = 'news_category'; - 保存数据时,
$model->allowField(true)->save($data)已废弃,改用$model->save($data)(默认只允许数据表字段) - 判断查询结果是否为空:不能用
if ($result),应改为if (!$result->isEmpty())或if (!empty($result->toArray())) - 条件查询中,
->where('status', 'neq', 1)不再支持,改用->where('status', '', 1) -
setInc()、setDec()等快捷方法已移除,需改用update(['view' => \think\facade\Db::raw('view + 1')])或事务更新
数据库迁移建议启用 think-migration
TP6.1.5 不内置迁移功能,推荐安装官方生态扩展统一管理结构变更:
- 执行
composer require topthink/think-migration:^4.0 - 运行
php think migrate:install初始化元数据表think_migration - 迁移文件必须放在
database/migrations/目录下,命名格式为YYYYMMDDHHIISS_describe.php(如20261020120000_create_user_table.php) - 每个迁移类需继承
think\migration\Migrator,并在up()和down()中成对实现正向与逆向操作,禁止在迁移中调用模型或业务逻辑



















