• 技术文章 >php框架 >Laravel

    详解laravel如何安装jenssegers/laravel-mongodb扩展

    藏色散人藏色散人2021-07-19 08:59:15转载206

    项目中使用了mongoDB,所以就到最大的同性交友网站找到了星星最多的jenssegers/laravel-mongodb

    包安装

    1、根据README,找到本地laravel对应的包版本
    0147ee6f66433067a5cffef949bf880.png

    2、开发环境中使用 composer requir 引入

    3、配置config/app.php

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

    :如果项目不涉及到mysql,那么可以直接将上面的默认数据引擎改成mongodb,关于env方法的说明就不具体阐述了

    'default' => env('DB_CONNECTION', 'mysql'),
    5、代码中使用
    // 获取数据
            $mongo = \DB::connection("mongodb")
                ->collection($collection)
    //            ->where("****","***")
                ->first();

    问题

    1、unsupported driver [mongodb]

    tip1检查phpinfo是否包含mongoDB拓展,如果没有mongoDB的拓展,请自行安装再试
    tip2重点!一定要检查laravel的日志文件
    在我检查了mongoDb拓展之后还是不支持,查看日志:

    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方法同理,不过是修改同目录下的InsertMany

    2d731110cc82d0d6d499c973b5d56b1.png

    !!从源头解决这个问题的正确方法,查看phpinfo里面,将mongo的拓展,升级到最新的stable版本!具体请查看我以前的文章centos源码安装php7以上的mongodb拓展,如果是windows,直接下载dll文件就行了

    2、Authentication failed.

    tip1检查密码账号,再用工具连接,看看是不是自己配置错误

    tip2使用原生方法进行测试,如果原生能够连接,包方法却不能连接,那就考虑包的问题

     // %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的问题了,再次测试,同事发现连接写法经过修改之后就能成功!如下:

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

    ·百思不得骑姐之下,对比了mongoDB的版本,发现测试环境居然是个老版本。。/手动喷血

    ·在和运维与测试沟通了之后,为了保持线上版本的稳定性和敏捷开发的机动性,遂决定做代码兼容。
    再次打开包内源码,发现了如下的细节(敲黑板:注意看路径,此时是jenssegers包内)
    1c856c050993a306ff1f4a92ddf2f71.png知道原理之后,于是在配置文件中做了如下修改:

    8db428c7b33c60adc8e5798247d9e79.png

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

    相关推荐:最新的五个Laravel视频教程

    以上就是详解laravel如何安装jenssegers/laravel-mongodb扩展的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:jenssegers laravel
    上一篇:强烈推荐一个扩展包:Laravel Log Enhancer 下一篇:深入讲解laravel6中的队列与任务调度
    第16期线上培训班

    相关文章推荐

    • Laravel 5 IDE Helper如何安装• 一文介绍Laravel Ignition的一切• Laravel如何使用Observer实现日志管理模块• 非常有用的Laravel optional辅助函数!

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网