2017-07-25 37 views
0

我正在构建一个使用多个数据库的系统。我目前有一个自定义配置文件,我正在使用它有一些控制。该文件不通过版本控制。如何在Laravel 5.4的database.php之外建立自定义连接

我想这些数据库是独立的混帐。我正在寻找建立一个自定义连接,而不使用config/database.php

我当然可以从git中删除config/database.php,但我想保持它整洁,并使用我的自定义配置文件。

这里是/ config文件夹中找到我的clientconfig.php

<?php 
$clientDB = ''; 
if(isset($_SERVER['SERVER_NAME'])) { 
    $apiDomain = $_SERVER['SERVER_NAME']; 
    if ($apiDomain == 'www.example.com') { 
     $clientDB = 'clientdb_1'; 
    } 
} 
return [ 

    'client_db' => $clientDB 

]; 

我想补充我的连接在该文件中也被发现在database.php中

'connections' => [ 

    'sqlite' => [ 
     'driver' => 'sqlite', 
     'database' => env('DB_DATABASE', database_path('database.sqlite')), 
     'prefix' => '', 
    ], 

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

    'clientdb_1' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', 'localhost'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => ('clientdb_1'), 
     'username' => env('DB_USERNAME', 'example'), 
     'password' => env('DB_PASSWORD', 'example'), 
     'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 
    ], 

是有一个干净的方式可以做到这一点?

编辑:我已经consired的.ENV文件,但它是太乱考虑到我可能有不同数量的数据库等。我仍然会将它们添加到database.php中这正是我想避免的。

+0

我发现这一点,我相信我可以动态地设置这些值,如果发生这种情况,请回复并回答https://laracasts.com/讨论/渠道/雄辩/如何修改数据库连接字符串在laravel-5 – Adrian

+1

可能重复[从当前数据库创建laravel多个mysql连接](https://stackoverflow.com/questions/42038674/ create-laravel-multiple-mysql-connection-from-current-database) –

+0

是的,你可以使用配置动态设置数据库连接 –

回答

0

我能够通过使用config()在该文件中添加我自己的新连接。

if ($apiDomain == 'www.example.com') { 

    $appUrl = $apiDomain; 
    $clientDB = 'clientdb_1'; 

    config(['database.connections.clientdb_1' => array(
     'driver' => 'mysql', 
     'host' => env('DB_HOST', 'localhost'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => $clientDB, 
     'username' => 'example', 
     'password' => 'example', 
     'charset' => 'utf8mb4', 
     'collation' => 'utf8mb4_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 

    )]); 
} 

注意:除非我的自定义配置文件后 database.php中加载这没有奏效。因为它是按字母顺序,所以我不得不将我的文件重命名为z_clientconfig.php