【问题标题】:Laravel mongodb ->getPdo() return nullLaravel mongodb ->getPdo() 返回 null
【发布时间】:2016-11-20 04:23:37
【问题描述】:

我正在使用DB::connection('mongodb')->getPdo() 检查数据库是否已连接(如果未连接,phpunit 会将某些测试标记为已跳过),结果->getPdo() 始终返回 null。我可以使用php artisan migrate 创建新集合,并且可以将数据插入集合,从而证明连接有效。

环境:

操作系统:运行 MAMP 3.2.0 的 Windows 10

laravel : 5.2.37

jenssegers/mongodb:3.0.2

编辑1:使用DB::connection('mongodb')->getMongoDB()->connected添加返回的对象

MongoDB\Collection {#647
 +collectionName: "connected",
 +databaseName: "destinycore",
 +manager: MongoDB\Driver\Manager {#640},
 +readConcern: MongoDB\Driver\ReadConcern {#642},
 +readPreference: MongoDB\Driver\ReadPreference {#643},
 +typeMap: [
   "array" => "MongoDB\Model\BSONArray",
   "document" => "MongoDB\Model\BSONDocument",
   "root" => "MongoDB\Model\BSONDocument",
 ],
 +writeConcern: MongoDB\Driver\WriteConcern {#644},
}

【问题讨论】:

    标签: php mongodb laravel-5.2


    【解决方案1】:

    虽然令人困惑,但实际上是正确的。这个连接类扩展自 Laravel 提供的基类。它不返回 PDO 实例,因为这是一个 MongoDB 连接。它实际上并没有使用 PDO,它只用于 SQL 相关的数据库。如果你正在寻找这个包的“原始”连接,你应该使用getMongoDB 方法,它返回一个MongoDB\Client 实例。

    【讨论】:

    • 无论如何我想要验证是否已建立与数据库的连接。因为这是我集成测试中的辅助方法。基本上,如果无法建立连接,phpunit 将跳过测试。有什么方法可以帮助我吗?
    • 您应该能够看到 ->getMongoDB()->connected 属性是否为真。它是公开的。
    • @theminer3746 如果这样可以解决问题,您能否将我的答案标记为正确?
    • 我尝试过使用DB::connection('mongodb')->getMongoDB()->connected,但是无论我的机器上mongodb是启动还是关闭,它都会返回MongoDB\Collection对象(在编辑1中显示)
    • @theminer3746 你不能只使用连接是微不足道的,看看它是否失败?我认为这不是 80% 的用例,而更像是一个边缘案例。无论如何,您似乎正在使用 MongoDB PHP 扩展的过时版本。此外, ->connected 布尔值甚至是不推荐使用的属性。使用新扩展,连接是惰性的,因此您必须执行操作才能确定凭据是否正确。
    猜你喜欢
    • 2015-11-18
    • 2019-10-14
    • 2020-11-24
    • 1970-01-01
    • 2017-08-05
    • 2019-04-17
    • 1970-01-01
    • 2023-03-28
    • 2022-06-12
    相关资源
    最近更新 更多