2015-12-04 24 views
1

我有用流明(laravel)編寫的API。我正在使用雄辯爲我的模型。
我需要做的是使用基於url(端點)的不同數據庫。 例如我有http://apiprovider.com/api/v1/作爲基礎API url,它連接到api_v1數據庫,但如果使用v2,則需要使用另一個數據庫http://apiprovider.com/api/v2,例如api_v2數據庫。
所有類和laravel應用程序應該是相同的,只根據版本不同的數據庫。爲不同的端點使用多個數據庫

數據庫設置存儲在.env文件中。

請提出正確的方法來實現這個?或者至少有可能的方式。 謝謝。

回答

2

這只是一個想法,我還沒有嘗試過,但是一個簡單的方法是從中間件切換兩個數據庫。

例如,你可以定義可用的兩個連接在database.php

'connections' => [ 

    'mysql1' => [ 
     '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, 
    ], 

    'mysql2' => [ 
     'driver' => 'mysql', 
     'host'  => env('DB_HOST_2', 'localhost'), 
     'database' => env('DB_DATABASE_2', 'forge'), 
     'username' => env('DB_USERNAME_2', 'forge'), 
     'password' => env('DB_PASSWORD_2', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => false, 
    ] 

然後創建一箇中間件和交換機的DB手柄方法

public function handle($request, Closure $next) 
{ 
    //check the request URL and decide what DB to use 

    //set the DB for this request 
    Config::set('database.default', $dbname); 
} 

我認爲Config::set('database.default', $dbname);將只用於目前的請求,但它會做你需要的東西

+1

真棒,thx很多。奇蹟般有效 – CROSP

相關問題