2017-07-18 27 views
0

我們正在構建一個多租戶應用程序。通過管理界面,我們將在需要時添加新租戶。此應用程序需要使用1 + n數據庫。Laravel的多個數據庫PHP

1主DB與約5表。 n我們創建的每個租戶的數據庫。特定於租戶的數據庫可能會駐留在單獨的數據庫服務器上。

問:

  1. 什麼是實現這一目標的最佳途徑?
  2. 我們在哪裏存儲每個租戶的db連接信息?
  3. 有時,我們可能必須在租戶和主數據庫中的表中觸發連接查詢。 這將如何工作?

預先感謝您的閱讀和任何可能的解決方案。

回答

0

我們可以設置在連接部分config/database.php數據庫連接:

'connections' => [ 
    //Our primary DB 
    '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' => false, 
     'engine' => null, 
    ], 
    //Secondary DB 
    'mysql2' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', 'localhost'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => env('DB2_DATABASE', 'secondary'), 
     'username' => env('DB2_USERNAME', 'forge'), 
     'password' => env('DB2_PASSWORD', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => false, 
     'engine' => null, 
    ], 
], 

而對於模型中,我們可以添加

class User2 extends Model 
{ 
    protected $connection = 'mysql2'; 
} 

而且,遷移我們可以使用連接方法。

Schema::connection('mysql2')->create('table') 

而且如果使用Eloquent ORM,我們可以使用setConnection('mysql2')就可以了。

$user = new User2; 
$user->setConnection('mysql2'); 

這個答案在此基礎上question

+0

感謝您的寶貴意見。但是,如果我們申請,我們會繼續創建多個租戶,每個租戶都會有一個單獨的數據庫。 因此,我們需要一種機制來存儲每個租戶的數據庫連接信息。 有關如何實現此目的的任何輸入? –

0

在我的情況下,不會使用多租戶在中間件 使用$連接在主數據庫 一組孩子分貝PARAMS 店子分貝配置=在「孩子」需要模型 參加是不可能的,因爲可能是不同的服務器,但關係的很大一部分是工作propertly(不whereExists,withCount ..等)

希望它`幫助