2017-07-18 18 views
0

マルチテナントアプリケーションを構築しています。管理インターフェースを使用して、必要に応じて新しいテナントを追加します。このアプリケーションは1 + nデータベースで動作する必要があります。Laravelの複数のデータベースPHP

1メインDBには約5つのテーブルがあります。 n作成する各テナントのDB。テナント固有のデータベースは、別個のDBサーバー上に常駐することができます。

質問:

  1. これを達成するための最良の方法は何ですか?
  2. 各テナントのdb接続情報はどこに保存されますか?
  3. 場合によっては、テナントとメインDB内のテーブルに対して結合クエリを実行する必要があります。 これはどのように機能しますか?

事前にお読みいただきありがとうございます。

答えて

0

私たちは、接続部にconfig/database.phpでDB接続を設定することができます

'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') 

そして、あなたは雄弁ORMを使用している場合、我々はそれにsetConnection('mysql2')を使用することができます。

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

文句を言わないでミドルウェア 使用$接続=「子」でメインデータベース セットの子のdbのparamsにおけるマルチテナント 店の子デシベル構成を使用私の場合、このquestion

+0

貴重な情報をお寄せいただきありがとうございます。ただし、申請の場合は、複数のテナントを作成し、テナントごとに個別のDBが作成されます。 したがって、テナントごとにDB接続情報を格納するメカニズムが必要です。 これを達成する方法に関する入力はありますか? –

0

に基づいてこの答え異なるサーバであってもよいので、参加 必要なモデルは、可能ではありませんが、関係の巨大な部分はpropertly(ないwhereExists、withCount ...など)

ホープそれ `sは

を助ける仕事です
関連する問題