Рубрики
Uncategorized

Установка Laravel jenssegers / расширение laravel mongodb и возникшая яма

Автор оригинала: David Wong.

Mongodb используется в проекте, поэтому мы нашли jenssegers/laravel mongodb с наибольшим количеством звезд на крупнейшем сайте знакомств для однополых пар.

Установка пакета

1. Найдите версию пакета, соответствующую локальному laravel, в соответствии с readme.

2. Используйте composer require в среде разработки

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. Использование в коде

//Get data
        $mongo = \DB::connection("mongodb")
            ->collection($collection)
//            ->where("****","***")
            ->first();

проблема

1、неподдерживаемый драйвер [mongodb]

совет 1 Проверьте, включает ли phpinfo расширение mongodb. Если расширения mongodb нет, пожалуйста, установите его самостоятельно и повторите попытку. совет 2 Ключ! Обязательно проверьте файл журнала 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 в том же каталоге.

!! Правильный способ решить эту проблему из исходного кода, проверьте phpinfo и обновите Mongo до последней стабильной версии! Пожалуйста, обратитесь к моей предыдущей статье, установка исходного кода CentOS, расширение mongodb выше php7. Если это Windows, загрузите DLL-файл напрямую.

2.Сбой аутентификации.

совет 1 Проверьте учетную запись с паролем, а затем подключитесь к инструменту, чтобы узнать, не ошиблась ли конфигурация.

совет 2 Используйте собственные методы для тестирования. Если собственные методы могут подключаться, но методы пакета не могут, рассмотрите проблемы с пакетами.

//% 40 is an escape of the @ symbol
 $manager = new \MongoDB\Driver\Manager("mongodb://mongo:user:passwd%[email protected]:27017");
 $query=new \MongoDB\Driver\Query([]);
 $cursor = $manager->executeQuery('test.test', $query);
 dd($cursor);

· Как и выше, мы обнаружили, что все еще не можем подключиться. Учитывая проблему Монго, мы протестировали ее еще раз и обнаружили, что метод записи соединений может быть успешным после изменения! Следующим образом:

 $manager = new \MongoDB\Driver\Manager("mongodb://mongo:user:passwd%[email protected]:27017/data");

· После сравнения версии mongodb мы обнаружили, что тестовая среда является старой версией./Ручное распыление крови

· После общения с O & M и тестирования, чтобы сохранить стабильность онлайн-версии и гибкость гибкой разработки, мы решили обеспечить совместимость кода. Снова откройте исходный код в пакете и найдите следующие сведения (постучите по доске: обратите внимание на путь, это пакет jenssegers) После ознакомления с принципом мы внесли следующие изменения в файл конфигурации:

На этом этапе добавьте, распространите, нажмите и закончите!