2015-05-04 75 views
1

讓說我有在應用中的以下數據庫設置/配置/ database.php中有沒有辦法在laravel 4中爲同一個函數下的所有連接設置db連接設置?

'default' => 'mysql', 

'connections' => array(

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

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

從laravel的官方指南,也有一些方法來選擇要使用的連接設置。將它設置時,我需要進行連接,

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

或將其設置在模型:

class SomeModel extends Eloquent { 

    protected $connection = 'mysql2'; 

} 

就我而言,我已經複製數據庫,針對不同的用戶相同的架構,所以它是不可能在模型中設置它。有沒有辦法爲同一個函數下的所有連接選擇連接設置,以便我可以將它放在filter/baseController中並在運行時設置連接?

回答

0

這是第三個解決方案(最後一個):http://fideloper.com/laravel-multiple-database-connections

所以,你可以通過連接名稱到函數或將其設置在控制器中。

+0

最後的解決方案只改變了該模式下連接的設置。如果我連接不同的模型,我仍然需要重新設置。這比每次設置都好,但我想要一勞永逸的解決方案。 – cytsunny

2

一種辦法是更新「database.default」鍵,重新連接:

Config::set('database.default', 'mysql2'); 
DB::reconnect(); 
0

您可以只用這樣更改默認連接到「mysql2」。

DB::setDefaultConnection('mysql2'); 
相關問題