thinkphp 6+ 中唯一推荐使用 thinkacadedb 门面类,它自动从容器获取配置完整的 query 实例;thinkdb 命名空间已废弃不存在,手动 new query 会丢失事务、事件、连接池等核心能力。

直接用 thinkacadeDb,不要用 thinkDb。
thinkacadeDb 是官方唯一推荐的门面调用方式
ThinkPHP 6+ 中,thinkacadeDb 是数据库操作的「门面类(Facade)」,它封装了底层 Query 实例,提供静态、链式、易读的调用入口。你写的 Db::table('user')->where('id', 1)->find() 就是通过它完成的——它会自动从容器中获取已配置好连接、事务、事件监听等功能的 Query 实例。
而 thinkDb 这个类在 ThinkPHP 6 及之后版本中根本不存在。早期 TP5 文档里曾有少量模糊提及,但官方早已废弃;当前所有稳定版(TP6.0+、TP8.x)源码中均无该命名空间路径。如果你在代码里写了 use thinkDb; 并能运行,大概率是误用了旧教程,或 IDE 缓存/自动补全误导,实际生效的仍是 facade 版本。
为什么不能手动 new Query 或绕过 Facade
有人试图用 new hinkdbQuery(['connection' => 'mysql2']) 切换数据库,这是危险操作:
- 绕过容器管理,事务无法跨 Query 生效
- 事件监听(如 onQuery、onConnect)不会触发
- 连接池、调试日志、SQL 分析等中间件能力丢失
正确做法是走门面: Db::connect('mysql2')->table('user')->find() —— 它确保复用容器内完整生命周期的连接实例。
引入写法必须明确且一致
控制器或逻辑文件中,只写这一行:
use thinkacadeDb;
然后直接使用 Db::xxx()。不需要额外实例化,也不需要配置单例或静态属性。框架启动时已自动注册该门面到容器。
若 IDE 提示找不到类,请检查:
– 是否启用了 Composer 自动加载(composer dump-autoload)
– vendor/topthink/think-orm 是否安装(TP6+ 数据库核心已独立为 think-orm 包)
– 项目是否误删了 config/facade.php 中 Db 的映射配置(默认存在,不建议改)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











