ThinkPHP6主从配置需启用deploy=1和rw_separate=true,write为单数组、read可多库;第三方类库优先用Composer自动加载,非Composer类库放extend/并配置PSR-4命名空间。

ThinkPHP 主从数据库配置和第三方类库引入是两个独立但常被一起使用的场景。它们不互相依赖,但容易因加载顺序或路径误配导致“类找不到”或“查询走错库”。下面直接说清关键点和实操步骤。
主从配置必须显式启用开关
只写 read 和 write 数组不够。TP6 默认忽略这些字段,除非打开部署开关:
- 在 config/database.php 中,把数据库连接配置(如 'mysql')里加上 'deploy' => 1 和 'rw_separate' => true
- 'write' 只能是单数组,不能写成数组套数组;'read' 可以是单个或多个从库配置
- 事务中、带锁查询(
->lock(true))、FOR UPDATE语句会自动走主库,无需额外干预
第三方类库优先走 Composer 自动加载
TP6 项目应默认使用 Composer 管理依赖。只要类库符合 PSR-4 规范,安装后即可直接 use:
- 执行 composer require guzzlehttp/guzzle 或其他 SDK
- 入口文件
public/index.php已包含require __DIR__.'/../vendor/autoload.php';,无需改动 - 控制器中直接
use GuzzleHttpClient;,然后$client = new Client();
非 Composer 类库放 extend/ 目录并注册命名空间
手动下载的 SDK(如微信 PHP-SDK、二维码生成类等),不推荐放 Vendor(那是 TP3/5 的老路径),TP6 官方建议用 extend/:
立即学习“PHP免费学习笔记(深入)”;
- 例如:将
PhpQrCode.php放到 extend/phpqrcode/QRcode.php - 在 composer.json 的
"autoload"下添加:"psr-4": { "phpqrcode\": "extend/phpqrcode/" } - 运行 composer dump-autoload -o 生效
- 代码中
use phpqrcodeQRcode;即可调用
主从环境里用第三方类库要注意连接隔离
比如用 Guzzle 请求外部 API,和数据库主从无关;但若类库内部自己建 PDO 连接(如某些旧版支付 SDK),就可能绕过 TP 的主从路由:
- 检查该类库是否硬编码了 host/port,是否读取了 .env 或自定义配置
- 如需复用 TP 的数据库连接配置,可把 host/user/pass 提取出来传给第三方类库
- 避免在
Db::transaction()内部调用含 DB 操作的第三方方法,否则可能引发连接冲突或超时



















