2017-07-25 35 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