ThinkPHP 6.0 数据库配置核心在 config/database.php,必须正确定义 default(默认连接别名)和 connections(具体连接参数),主从需设 'deploy'=>1 和 'rw_separate'=>true,并在 connections 内配置 write/read;.env 配置优先级更高,事务与锁查询强制走主库。

ThinkPHP 6.0 的数据库连接配置核心在 config/database.php 文件,需明确区分 连接定义 与 默认启用逻辑。配错位置或漏关键参数,会导致连接失败或主从失效。
基础连接配置结构
必须包含 default(默认连接别名)和 connections(具体连接定义),二者缺一不可:
-
default是字符串,如'mysql',它只起“指向”作用,本身不存任何数据库参数 - 真正生效的配置写在
connections['mysql']内部,包括type、hostname、database、username、password等 - 若使用
.env,推荐统一用env('database.xxx')方式读取,例如:'hostname' => env('database.hostname', '127.0.0.1'),
多库与主从配置要点
主从不是“写了 read/write 就自动跑”,必须显式开启开关:
- 在
connections['mysql']中同时设置:'deploy' => 1(启用分布式部署模式)'rw_separate' => true(启用读写自动分离) -
write只能是单数组(一个主库),格式:'write' => ['hostname' => 'master-host', 'database' => 'db_name', ...] -
read可为单数组(一个从库)或数组套数组(多个从库,轮询):'read' => [['hostname' => 'slave1'], ['hostname' => 'slave2']] - 加权轮询需额外加:
'master_balance' => ['weight' => [2, 1]](权重数必须等于 read 数组长度)
连接切换与手动指定
日常开发中两种常用方式行为完全不同:
-
Db::name('user'):走default指向的连接(如mysql),受其rw_separate控制,自动读从、写主 -
Db::connect('mysql_slave'):绕过所有分离逻辑,直连名为mysql_slave的独立连接(需在connections中单独定义) - 临时查特定从库做健康检查或灰度验证,必须用后者,并提前在配置里声明完整连接参数
常见踩坑提醒
这些细节不注意,配置就等于白写:
-
'deploy'和'rw_separate'必须放在具体连接块内(如connections['mysql']),不能写在顶层或default下 - 事务内、带锁查询(
->lock(true)、FOR UPDATE)、->master(true)强制走主库,这是框架内置策略,无法关闭 -
.env中的数据库配置优先级高于database.php,调试时建议先确认环境变量是否覆盖了你的修改 - PDO 长连接、小写字段等高级参数,统一通过
'params'数组传入,例如:'params' => [\PDO::ATTR_PERSISTENT => true, \PDO::ATTR_CASE => \PDO::CASE_LOWER]
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











