You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Doctrine MongoDB ODM 2.x中如何获取1.x版本里Doctrine\MongoDB\Connection的等效对象?

在Doctrine MongoDB ODM 2.x中获取等效于1.x Connection的对象

首先得明确一个核心变化:Doctrine MongoDB ODM 2.x完全重构了底层连接实现,直接基于官方的mongodb/mongodb PHP库开发,原来的Doctrine\MongoDB\Connection类已经被移除,不再有完全同名的替代类,但你可以用官方库的原生对象来实现相同的功能。

对应不同需求的替代方案:

  • 需要管理连接/服务器的客户端对象(对应1.x中Connection的连接管理能力):
    使用getClient()方法获取MongoDB\Client实例,这就是原来Connection底层封装的客户端对象:

    $client = Zend_Registry::get('DocumentManager')->getClient();
    

    这个实例负责连接池管理、服务器配置等,和你1.x中Connection里的mongoClient属性是同一个东西。

  • 需要操作具体数据库的对象(对应1.x中通过Connection获取的数据库实例):
    直接调用getDatabase()获取MongoDB\Database实例:

    $database = Zend_Registry::get('DocumentManager')->getDatabase();
    

    如果是针对特定文档类的数据库(比如你尝试的Model\User),getDocumentDatabase()的用法是对的,返回的也是MongoDB\Database实例,这就是你用来执行集合查询、写入操作的入口。

为什么你之前的尝试看起来不对?

你提到用getClient()和getDocumentDatabase()得到的不是"正确对象",其实是因为类名从Doctrine封装的Connection变成了官方库的原生类,但它们的功能是完全等效甚至更强大的。比如:

  • 原来Connection的server属性信息,可以通过$client->getManager()->getServers()获取;
  • 原来手动调用connect()的逻辑不需要了,MongoDB\Client会自动管理连接生命周期。

如果你的旧代码依赖Doctrine\MongoDB\Connection的特定方法,需要调整为使用MongoDB\Client或MongoDB\Database的对应方法。

内容的提问来源于stack exchange,提问作者cookie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:18:13