Laravel 5 - 如何为同一个 laravel 项目设置超过 1 个数据库凭据(如果可能)?
Laravel 5 - How can I set more than 1 database credentials for the same laravel project (if it is possible)?
我有一个项目必须通过这 2 URLs us_myproject.com
和 es_myproject.com
.
访问
它们共享相同的文件夹和代码。实际上只有一个 laravel 项目:htdocs/myproject
。
取决于 URL 信息必须来自 us_db
或 es_db
,基于使用的 URL。
所以我的问题是如何设置 .env
数据库凭据以指向这两个不同的数据库。我有 2 个不同的数据库、2 个不同的用户和 2 个不同的密码。我怎样才能完成这个任务?
我有以下有效的代码:
URL: us_myproject.com/dbtest
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=us_db
DB_USERNAME=root
DB_PASSWORD=''
Route::get('dbtest',function(){//Works good
$tblusertypes=DB::table("tblusertypes")->get();
return $tblusertypes;
});
如果我这样做 URL: es_myproject.com/dbtest
应该查询 es_db
但我不知道如何设置它。有什么想法吗?
是的,您可以在 Laravel 中设置多个数据库,在 connection
数组中打开 config/database
设置一个新数据库,就像在 mysql
数组中一样 [=16] =]
在 .env
文件中你可以检测到什么数据库 default
调用它:$result = DB::connection('my_new_database')->table('my_table')->get();
阅读您对其他答案的评论,我想出了以下解决方案:
- 打开 config/database.php:
<?php
return [
...
'connections' => [
...
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
...
],
...
];
- 像这样编辑文件:
<?php
$config = [
...
'connections' => [
...
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
...
],
...
];
if( Request::server('HTTP_HOST') == 'es_myproject.com' )
{
$config['connections']['mysql'] = [
'driver' => 'mysql',
'host' => 'esHOST',
'database' => 'esDB',
'username' => 'esUSER',
'password' => 'esPASSWORD',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
];
}
return $config;
这里我假设 .env
文件包含 us_myproject.com 的数据库凭据。
我有一个项目必须通过这 2 URLs us_myproject.com
和 es_myproject.com
.
它们共享相同的文件夹和代码。实际上只有一个 laravel 项目:htdocs/myproject
。
取决于 URL 信息必须来自 us_db
或 es_db
,基于使用的 URL。
所以我的问题是如何设置 .env
数据库凭据以指向这两个不同的数据库。我有 2 个不同的数据库、2 个不同的用户和 2 个不同的密码。我怎样才能完成这个任务?
我有以下有效的代码:
URL: us_myproject.com/dbtest
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=us_db
DB_USERNAME=root
DB_PASSWORD=''
Route::get('dbtest',function(){//Works good
$tblusertypes=DB::table("tblusertypes")->get();
return $tblusertypes;
});
如果我这样做 URL: es_myproject.com/dbtest
应该查询 es_db
但我不知道如何设置它。有什么想法吗?
是的,您可以在 Laravel 中设置多个数据库,在 connection
数组中打开 config/database
设置一个新数据库,就像在 mysql
数组中一样 [=16] =]
在 .env
文件中你可以检测到什么数据库 default
调用它:$result = DB::connection('my_new_database')->table('my_table')->get();
阅读您对其他答案的评论,我想出了以下解决方案:
- 打开 config/database.php:
<?php return [ ... 'connections' => [ ... 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ], ... ], ... ];
- 像这样编辑文件:
<?php $config = [ ... 'connections' => [ ... 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ], ... ], ... ]; if( Request::server('HTTP_HOST') == 'es_myproject.com' ) { $config['connections']['mysql'] = [ 'driver' => 'mysql', 'host' => 'esHOST', 'database' => 'esDB', 'username' => 'esUSER', 'password' => 'esPASSWORD', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ]; } return $config;
这里我假设 .env
文件包含 us_myproject.com 的数据库凭据。