2016-11-08 122 views
2

我需要在laravel中使用幾個數據庫,並且我試圖創建一個表單來添加一個新的數據庫連接到config/database.php中的連接數組。Laravel - 如何添加新的連接到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', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => true, 
     'engine' => null, 
    ], 

    'pgsql' => [ 
     'driver' => 'pgsql', 
     'host' => env('DB_HOST', 'localhost'), 
     'port' => env('DB_PORT', '5432'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'charset' => 'utf8', 
     'prefix' => '', 
     'schema' => 'public', 
     'sslmode' => 'prefer', 
    ], 

], 

感謝

+0

此鏈接可能有幫助[這裏](http://stackoverflow.com/questions/39198056/edit-active-database-on-the-fly/39198141#39198141) – linuxartisan

回答

2

您簡單許多數據庫添加到陣列中,你對你.ENV文件或陣列valyes像這樣需要再添加連接值:

return array(

'default' => 'my_first_db', 

'connections' => array(

    # Our primary database connection 
    'my_first_db' => array(
     'driver' => 'mysql', 
     'host'  => 'host1', 
     'database' => 'database1', 
     'username' => 'user1', 
     'password' => 'pass1' 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 

    # Our secondary database connection 
    'my_second_db' => array(
     'driver' => 'mysql', 
     'host'  => 'host2', 
     'database' => 'database2', 
     'username' => 'user2', 
     'password' => 'pass2' 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
    ), 
), 

) ;

Schema::connection('my_second_db')->create('a_new_table', function($table) 
{ 
    $table->increments('id'): 
}); 

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

要在窗體添加連接,你需要把數據上傳到類似上述再寫入服務器模板,這是一個有點安全隱患的這樣做,並需要要小心在你做什麼以及如何去做,在請求中發佈數據庫數據,然後將數據庫數據保存到文件有點過分。

您可以設置一個配置文件,該文件包含10個預先定義有PDO的數據庫,然後您可以覆蓋設置或保存到其中沒有設置分配的配置文件之一。

+0

好的,我明白這一點。最好手動將文件添加到文件中。 可以在登錄屏幕的下拉列表中列出這些連接? 我需要該用戶後,把你的訪問數據選擇他想要的數據庫,然後應用程序使用這個數據庫。我怎樣才能做到這一點? @Birdy – user3242861

+0

是的,你可以用一個選擇選項來管理,讓我們說10個預先定義的配置佈局,在配置文件中你可以將值存儲爲變量,然後將數據傳遞給配置文件(Class),然後你的數據庫被動態存儲另一種選擇是創建一個數據庫表,用於存儲每個用戶的數據庫值或每個希望擁有的配置的數據庫值,然後您只有1個數據庫連接類,該數據庫連接類根據用戶標識從數據庫中獲取連接值,你是否願意提供一個例子而不知道你想要的用例? – Birdy

+0

是的,如果你給我一個例子,那太棒了。我想要做的是:我有幾個數據庫(客戶端),並在我的應用程序登錄我必須選擇我想要使用的數據庫,並在登錄後,應用程序將加載所選數據庫的數據。你明白我的理想嗎? @Birdy – user3242861

1

您可以使用配置助手和動態設置的配置:

config([ 
    'database.connections.mysql.database' => $dynamicDB, 
    'database.connections.mysql.username' => $dbUsername, 
    'database.connections.mysql.password' => $dbPassword, 
    // Any other dynamically set variables 
]); 

您可以在參數存儲在會話,並將其默認爲您的配置文件:

config([ 
    'database.connections.mysql.database' => session('db_database', config('database.connections.mysql.database')), 
    'database.connections.mysql.username' => session('db_username', config('database.connections.mysql.username')), 
    'database.connections.mysql.password' => session('db_password', config('database.connections.mysql.password')), 
    // Any other dynamically set variables 
]); 

中間件這樣做會給你更多的控制權限來設置和使用這些參數。