[英]How to use multiple database connections in laravel project?
我想在laravel項目中使用mysql和mongoDB,我知道我可以在database.php文件中定義多個連接數組,並像這樣調用它們:
$users = DB::connection('foo')->select(...);
但是我的問題是,在項目中如何同時使用mongoDB和mysql?
真正的問題是.env
文件,因為它僅使用一種數據庫配置。
所以讓我為您清除這是laravel v5.3中的database.php文件:
'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?
僅供參考:我希望mysql為默認連接,在某些情況下使用mongodb。
我已經找到了解決方案,這要感謝@astroanu
您可以更改默認的環境變量名稱,但不會破壞您的應用程序功能
您可以將您的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';
您這里唯一的問題是實現數據庫之間的關系,這是不可能的,您將需要為此編寫自己的查詢。
僅供參考:用於測試修補程序中的連接:
DB::connection('mongodb')->collection('migrations')->get();
注意,這里的mongodb是database.php文件中的連接名稱,而migrations是集合名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.