laravel安裝jenssegers/laravel-mongodb拓展,以及遇到的坑

項目中使用了mongoDB,因此就到最大的同性交友網站找到了星星最多的jenssegers/laravel-mongodbphp

包安裝

一、根據README,找到本地laravel對應的包版本
clipboard.png

二、開發環境中使用 composer requir 引入mysql

三、配置config/app.phplaravel

/*
         * mongoDB
         */
        Jenssegers\Mongodb\MongodbServiceProvider::class,
四、database.php 配置
"mongodb" => [
      "driver" => "mongodb",
      "host" => "127.0.0.1",
      "port" => 27017,
      "database" => "data",
      "username" => "test",
      "password" => "test",
   ],

:若是項目不涉及到mysql,那麼能夠直接將上面的默認數據引擎改爲mongodb,關於env方法的說明就不具體闡述了git

'default' => env('DB_CONNECTION', 'mysql'),
五、代碼中使用
// 獲取數據
        $mongo = \DB::connection("mongodb")
            ->collection($collection)
//            ->where("****","***")
            ->first();

問題

一、unsupported driver [mongodb]

tip1檢查phpinfo是否包含mongoDB拓展,若是沒有mongoDB的拓展,請自行安裝再試
tip2重點!必定要檢查laravel的日誌文件
在我檢查了mongoDb拓展以後仍是不支持,查看日誌:github

Type error: Argument 3 passed to MongoDB\Driver\Server::executeQuery() must be an instance of MongoDB\Driver\ReadPreference or null, array given {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Type error: Argument 3 passed to MongoDB\\Driver\\Server::executeQuery() must be an instance of MongoDB\\Driver\\ReadPreference or null, array given at F:\\project\\interface_center_jtl\\vendor\\mongodb\\mongodb\\src\\Operation\\Find.php:299)

追到具體的位置,經過修改此處的返回,再次打印,發現已經能夠正常使用get/first方法。insert方法同理,不過是修改同目錄下的InsertManysql

clipboard.png

!!從源頭解決這個問題的正確方法,查看phpinfo裏面,將mongo的拓展,升級到最新的stable版本!具體請查看我之前的文章centos源碼安裝php7以上的mongodb拓展,若是是windows,直接下載dll文件就好了mongodb

二、Authentication failed.

tip1檢查密碼帳號,再用工具鏈接,看看是否是本身配置錯誤segmentfault

tip2使用原生方法進行測試,若是原生可以鏈接,包方法卻不能鏈接,那就考慮包的問題windows

// %40是@符號的轉義
 $manager = new \MongoDB\Driver\Manager("mongodb://mongo:user:passwd%40abcdef@127.0.0.1:27017");
 $query=new \MongoDB\Driver\Query([]);
 $cursor = $manager->executeQuery('test.test', $query);
 dd($cursor);

·如上,發現依舊不能鏈接,考慮mongo的問題了,再次測試,同事發現鏈接寫法通過修改以後就能成功!以下:centos

$manager = new \MongoDB\Driver\Manager("mongodb://mongo:user:passwd%40abcdef@127.0.0.1:27017/data");

·百思不得騎姐之下,對比了mongoDB的版本,發現測試環境竟然是個老版本。。/手動噴血

·在和運維與測試溝通了以後,爲了保持線上版本的穩定性和敏捷開發的機動性,遂決定作代碼兼容。
再次打開包內源碼,發現了以下的細節(敲黑板:注意看路徑,此時是jenssegers包內)
clipboard.png
知道原理以後,因而在配置文件中作了以下修改:

clipboard.png

至此,add、commint、push,收工!

相關文章
相關標籤/搜索