商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > ThinkPHP 6 数据库配置文件迁移 5.1 差异【对照】

ThinkPHP 6 数据库配置文件迁移 5.1 差异【对照】

  发布于2026-07-11 阅读(0)

扫一扫,手机访问

先说几个核心判断:ThinkPHP 6 的数据库配置,跟 TP5.1 相比,改动幅度相当大,绝不是简单复制粘贴旧版配置文件就能搞定的事。从结构到逻辑,再到扩展支持,底层逻辑都变了样。如果直接迁移,大概率会遇到连库失败、读写分离不生效、迁移命令报错这类问题,甚至环境变量都读不出来。

ThinkPHP 6 数据库配置文件迁移 5.1 差异【对照】

所以,这篇文章把几个关键差异点拆开来讲,希望能帮大家少走弯路。

配置文件结构:从单文件大数组转向拆分+分层覆盖

TP5.1 时代,一个 database.php 文件搞定一切,所有数据库连接写在一个大数组里返回就行。但到了 TP6,这套玩法就彻底变了——配置必须按功能拆分,而且依赖 .env 文件来做运行时的动态覆盖。

  • TP5.1 里直接写 'hostname' => 'localhost' 没问题,TP6 则必须写成 'hostname' => env('DB_HOST', 'localhost'),否则 env() 函数读不到值。
  • 还有一点很容易踩坑:.env 文件必须存在,且命名必须准确,不能是 .env.local 这种变体,否则环境变量加载会失败。
  • 如果你新增了自定义配置,比如 config/oss.php,它不会自动加载,需要在 config/autoload.php 里显式声明 return ['oss']; 才行。

数据库连接方式:DSN 彻底退场,全转向数组配置

TP5.1 支持 DSN 字符串连接,比如 mysql://root:123@127.0.0.1:3306/db#utf8,用起来很灵活。但 TP6 已经彻底移除了这个能力,所有连接必须通过数组定义,并且要在 config/database.php 中显式声明连接标识。

  • 以前习惯用 Db::connect('mysql://...') 这种写法的,在 TP6 里会直接报错。现在必须改成 Db::connect('mysql'),同时确保 database.connections.mysql 下有对应的配置数组。
  • 多库配置也不再靠 DSN 来区分,而是靠连接名,比如 'sys_db''log_db',在代码各处显式传入即可。
  • 特别要留意的是,TP6 不再把 default 键当作默认连接名,实际生效的是 database.default 配置项的值。

读写分离机制:从 SQL 类型判断升级为模型绑定+部署模式

TP5.1 的读写分离,靠的是 'read_master' => true 这个开关,逻辑相对简单,仅对 select 类查询尝试走从库。但可控性也差,很多场景下不够精细。TP6 则改成了基于 deployrw_separate 的模型级路由策略,灵活性大幅提升,但配置复杂度也上来了。

  • 举个典型例子:在 TP5.1 中,where()->find()where()->value() 行为一致,都会走从库(如果开启了读写分离)。但在 TP6 中,后者可能绕过从库,因为底层调用的是 query 方法,而非 select
  • 从库配置必须是二维数组格式:'sla ve' => [['host' => 's1'], ['host' => 's2']]。如果写成了一维数组,系统会静默失败,但不会报错,排查起来很头疼。
  • 另外,TP6 默认启用了连接池,主从连接会分别缓存。升级后一定要检查一下,高并发场景下从库连接数是否出现了异常飙升。

迁移与扩展支持:迁移命令需手动装配,不再内置

TP5.1 自带 think migrate 命令,而且默认支持多连接(虽然有一些缺陷)。到了 TP6,迁移能力被完全剥离,需要手动安装扩展、注册命令、初始化元数据表,三步缺一不可。

  • 首先,必须执行 composer require topthink/think-migration:^4.0(TP6.3+ 版本推荐这个版本)。
  • 然后,在 config/console.php'commands' 数组中,加入 thinkmigrationCommand::class,这样命令才能被系统识别。
  • 最后,必须先运行 php think migrate:install 创建 think_migration 表,否则后续的 run 命令会直接失败。
  • 还有一点,TP5.1 的迁移文件不能直接拿来用。类继承、构造函数签名、方法参数全都不兼容,需要重新编写。
本文转载于:https://www.php.cn/faq/2799056.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注