直接原因是子应用缺少独立的 database.php 文件;每个子应用必须在 app/应用名/config/ 下严格放置该文件,返回含 type、hostname 等字段的完整数组,且需确保路由命中、多应用开启、扩展已安装。

直接原因是子应用缺少独立的 database.php 文件,不是配置写错了,而是根本没放对位置、没建对结构。
每个子应用必须有自己完整的 database.php
ThinkPHP 6 多应用模式下,不会继承根目录 config/database.php,也不会读取 .env 中同名键。admin、api 等子应用必须各自拥有:
- 路径严格为
app/admin/config/database.php(不能是 app/admin/database.php 或 config/database.php) - 文件必须真实存在,且返回一个完整数组
- 数组至少包含
'type'、'hostname'、'database'、'username'、'password' - 哪怕内容和主配置一模一样,也得手动复制一份过去——没有 fallback 机制
检查文件内容是否合法
常见写法错误会导致 “Database config not found” 或更底层的报错:
-
'type'字段缺失 → 报Class 'PDO' not found - 连接名用了大写字母或点号(如
'LogDB'或'log.db')→Connection not found: xxx - 数组返回为空、或被注释掉、或语法错误(如末尾多逗号)→ 框架加载失败
- 用
return [];却没填任何数据库参数 → 触发相同错误提示
确认应用是否真正被路由命中
子应用的配置只在该应用被访问时才加载。如果 URL 没带应用前缀(如 /admin),或路由未绑定到对应应用,框架压根不会去加载 app/admin/config/ 下的任何文件:
- 确保
route/route.php中已执行Route::import('app/admin/route.php', 'admin') - 访问地址必须含应用名,例如
http://localhost/admin/index/index - 检查
config/app.php中'auto_multi_app' => true已开启且无拼写错误 - 确认已安装
topthink/think-multi-app扩展,且版本为 TP6.x
快速验证步骤
在对应子应用的控制器中加一行调试代码:
-
dump(config('database'));—— 应输出该应用下的 database.php 内容,不是空或根配置 -
dump(Db::connect()->getConfig());—— 应显示当前应用连接的实际参数 - 若上述任一结果为空或报错,说明文件路径、命名、语法或加载时机出了问题











