我們正在構建一個多租戶應用程序。通過管理界面,我們將在需要時添加新租戶。此應用程序需要使用1 + n數據庫。Laravel的多個數據庫PHP
1主DB與約5表。 n我們創建的每個租戶的數據庫。特定於租戶的數據庫可能會駐留在單獨的數據庫服務器上。
問:
- 什麼是實現這一目標的最佳途徑?
- 我們在哪裏存儲每個租戶的db連接信息?
- 有時,我們可能必須在租戶和主數據庫中的表中觸發連接查詢。 這將如何工作?
預先感謝您的閱讀和任何可能的解決方案。
我們正在構建一個多租戶應用程序。通過管理界面,我們將在需要時添加新租戶。此應用程序需要使用1 + n數據庫。Laravel的多個數據庫PHP
1主DB與約5表。 n我們創建的每個租戶的數據庫。特定於租戶的數據庫可能會駐留在單獨的數據庫服務器上。
問:
預先感謝您的閱讀和任何可能的解決方案。
谷歌是你的朋友,所以是文檔: https://laravel.com/docs/5.4/database#using-multiple-database-connections
並添加您要使用的每個數據庫連接的新的連接。
要切換連接:
$users = DB::connection('foo')->select(...);
我們可以設置在連接部分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
在我的情況下,不會使用多租戶在中間件 使用$連接在主數據庫 一組孩子分貝PARAMS 店子分貝配置=在「孩子」需要模型 參加是不可能的,因爲可能是不同的服務器,但關係的很大一部分是工作propertly(不whereExists,withCount ..等)
希望它`幫助
感謝您的寶貴意見。但是,如果我們申請,我們會繼續創建多個租戶,每個租戶都會有一個單獨的數據庫。 因此,我們需要一種機制來存儲每個租戶的數據庫連接信息。 有關如何實現此目的的任何輸入? –