0

Я хочу использовать MySQL и MongoDB в моем Laravel проекте, я знаю, что могу определить несколько массив соединений в database.php файл и назвать их люблю:Как использовать несколько соединений с базами данных в проекте laravel?

$users = DB::connection('foo')->select(...); 

, но моя проблема заключается в том, как я могу использовать MongoDB и MySQL рядом друг с другом в проекте?

Настоящая проблема здесь .env file, так как она использует только одну конфигурацию базы данных.

поэтому позвольте мне ясно, что это для вас это мой файл database.php в Laravel v5.3:

'connections' => [ 

     'mysql' => [ 
      'driver' => 'mysql', 
      'host' => env('DB_HOST', 'localhost'), 
      'port' => env('DB_PORT', '3306'), 
      'database' => env('DB_DATABASE', 'iranad'), 
      'username' => env('DB_USERNAME', 'root'), 
      'password' => env('DB_PASSWORD', 'mysql'), 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => true, 
      'engine' => null, 
     ], 

     'mongodb' => [ 
      'driver' => 'mongodb', 
      'host' => env('DB_HOST', 'localhost'), 
      'port' => env('DB_PORT', '27017'), 
      'database' => env('DB_DATABASE'), 
      'username' => env('DB_USERNAME'), 
      'password' => env('DB_PASSWORD'), 
      'options' => [ 
       'database' => 'admin' 
      ] 
     ], 

    ], 

И это мой .env файл:

APP_ENV=local 
APP_KEY=base64:NN3Me+qA1UOfdYW2SQyAXtxODazCAYBAKfFdRAqcakg= 
APP_DEBUG=true 
APP_LOG_LEVEL=debug 
APP_URL=http://localhost 

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=test 
DB_USERNAME=root 
DB_PASSWORD=mysql 

BROADCAST_DRIVER=log 
CACHE_DRIVER=file 
SESSION_DRIVER=file 
QUEUE_DRIVER=sync 

REDIS_HOST=127.0.0.1 
REDIS_PASSWORD=null 
REDIS_PORT=6379 

MAIL_DRIVER=smtp 
MAIL_HOST=mailtrap.io 
MAIL_PORT=2525 
MAIL_USERNAME=null 
MAIL_PASSWORD=null 
MAIL_ENCRYPTION=null 

PUSHER_APP_ID= 
PUSHER_KEY= 
PUSHER_SECRET= 

Как вы можете видеть мой по умолчанию соединение с базой данных - mysql, а в .env - в конфигурации файла установлено значение mysql, теперь как я могу использовать mongoDB в своем приложении?

FYI: Я хочу, чтобы mysql был соединением по умолчанию, и в некоторых случаях я использую mongodb.

ответ

0

Я нашел решение благодаря @astroanu

вы можете изменить имена переменных ENV по умолчанию, он не сломается функциональность вы Appication

вы можете изменить database.php к чему-то как это:

'connections' => [ 
    'mysql' => [ 
     'driver' => 'mysql', 
     'host' => env('MYSQL_DB_HOST', 'localhost'), 
     'port' => env('MYSQL_DB_PORT', '3306'), 
     'database' => env('MYSQL_DB_DATABASE', 'iranad'), 
     'username' => env('MYSQL_DB_USERNAME', 'root'), 
     'password' => env('MYSQL_DB_PASSWORD', 'mysql'), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 
    ], 

    'mongodb' => [ 
     'driver' => 'mongodb', 
     'host' => env('MONGO_DB_HOST', 'localhost'), 
     'port' => env('MONGO_DB_PORT', '27017'), 
     'database' => env('MONGO_DB_DATABASE'), 
     'username' => env('MONGO_DB_USERNAME'), 
     'password' => env('MONGO_DB_PASSWORD'), 
     'options' => [ 
      'database' => 'admin' 
     ] 
    ], 

], 

затем на .env определить имя каждой переменной

#sql 
MYSQL_DB_HOST=... 
MYSQL_DB_PORT=... 
MYSQL_DB_DATABASE=... 
MYSQL_DB_USERNAME=... 
MYSQL_DB_PASSWORD=... 

# mongo 
MONGO_DB_HOST=... 
MONGO_DB_PORT=... 
MONGO_DB_DATABASE=... 
MONGO_DB_USERNAME=... 
MONGO_DB_PASSWORD=... 

на вашу модели определяет защищенный атрибут соединения: это должно быть либо из ваших имен подключения вы определили на database.php

protected $connection = 'mongodb'; 

единственная проблема для вас здесь будет осуществление связи между базами данными, что невозможно, вам вам нужно будет написать свои собственные запросы для этого.

FYI: Для тестирования ваших соединений в повозиться:

DB::connection('mongodb')->collection('migrations')->get(); 

Примечание MongoDB здесь является имя соединения в database.php файле и миграции это название коллекции.