hyperf 2.2 升级到 3.0 后,数据库组件已从 hyperf/database 迁移至 hyperf/db-connection,命名空间由 hyperfdatabase 变更为 hyperfdbconnection,需同步更新 use 语句、di 获取方式(改用 connectioninterface::class)及查询构建器获取逻辑(通过 queryfactoryinterface),并注意 sql server 的 tls 验证配置与 redis 连接时机问题。

Hyperf 2.2 升级到 3.0 后,hyperf/database 的命名空间和底层结构已变更,直接沿用旧写法会报类找不到或方法不存在错误,必须同步调整代码中所有数据库相关引用。
数据库组件命名空间从 HyperfDatabase 变更为 HyperfDbConnection
Hyperf 3.0 将数据库连接能力抽离为独立组件 hyperf/db-connection,原 hyperf/database(基于 Laravel Illuminate)已被弃用。升级后若仍 use HyperfDatabaseConnection 或调用 Db::connection() 等旧入口,会触发 Class not found 或 Call to undefined method 错误。
- 删除
composer require hyperf/database,改用composer require hyperf/db-connection - 所有
use HyperfDatabase...改为use HyperfDbConnection...(如use HyperfDbConnectionConnection) -
Db::connection()不再可用,改用 DI 容器获取:$this->container->get(ConnectionInterface::class)或注入ConnectionInterface - 查询构建器(QueryBuilder)不再通过
Connection::table()获取,而是由QueryFactoryInterface提供:$this->container->get(QueryFactoryInterface::class)->newQuery()
SQL Server 连接报 SSL 证书验证失败([08001])
这不是命名空间问题,但常在升级后首次连 SQL Server 时集中暴露:Hyperf 3.0 默认启用更严格的 TLS 验证,而本地或测试环境 SQL Server 多用自签名证书,导致连接中断并抛出 certificate verify failed:self signed certificate。
- 必须在数据库配置中显式关闭证书校验,仅限开发/测试环境:
'encrypt' => 'yes'和'trust_server_certificate' => 'true' - 不要只加
encrypt;缺少trust_server_certificate仍会失败 - 生产环境严禁设为
true,应部署受信证书并改用'trust_server_certificate' => 'false'+ 正确 CA 配置 - 确认 ODBC Driver 版本 ≥ 17(推荐 18),旧驱动不支持
trust_server_certificate参数
Redis 连接异常伴随 aio_thread failed 和 Address not available
这通常不是数据库驱动本身的问题,而是升级后配置加载时机与连接池初始化顺序错位所致——Redis 客户端在 Apollo/Nacos 配置尚未就绪时就尝试连接,且 Swoole 线程池因资源不足创建失败。
- 检查
config/autoload/redis.php是否仍引用env('REDIS_HOST')等变量,而这些变量依赖配置中心;建议先降级为硬编码测试是否恢复 - 在
config/autoload/dependencies.php中,避免提前 new RedisClient;改用延迟代理或make(…, […])方式注入 - Docker 环境下务必检查
ulimit -n和内存限制,aio_thread failed. error=22很可能源于线程栈大小不足或RLIMIT_STACK过低 - 临时启用
--debug启动,观察日志中RedisFactory初始化是否早于ConfigCenterready 事件
最易被忽略的是:Hyperf 3.0 的 db-connection 组件默认不自动注册 QueryBuilder 实例,QueryFactoryInterface 需手动绑定或启用 hyperf/query-builder 扩展;否则看似连接成功,一执行 select 就报 Entry "Hyperf\QueryBuilder\QueryFactoryInterface" not found —— 这个错误不会出现在连接阶段,只在首次查询时爆发。











