2015-10-18 38 views
5

サブドメインに基づいて、特定のテナントのデータベースに接続するマルチテナントアプリケーションを作成しています。Laravelで複数のデータベースを接続する最良の方法

// To connect with a subdomain - the entry will be in config/database.php. 
    public static function connectSubdomainDatabase($dbname) 
    { 
     $res = DB::select("show databases like '{$dbname}'"); 
     if (count($res) == 0) { 
      App::abort(404); 
     } 
     Config::set('database.connections.subdomain.database', $dbname); 

     //If you want to use query builder without having to specify the connection 
     Config::set('database.default', 'subdomain'); 
     DB::reconnect('subdomain'); 
    } 

はそれをデータベースに接続するための最善の方法はありますか、私はパフォーマンスの観点から考えていますので、毎回私が接続していているためという問題がある。ここでは

はそれを行うためのコードです異なるサブドメインが存在する場合はデータベースと比較します。それを行う最良の方法は何ですか?

+0

あなたには、いくつかの作業がlaravelのために行われている共有デシベルマルチテナントパターンを使用することができれば。 https://github.com/AuraEQ/laravel-multi-tenant – user993553

+0

@ user993553はい私は前にそれをチェックしましたが、私のタグで言及したように私はLaravel-5.1とパッケージ4.2 + –

+0

のためにそれが欲しいhttps: //github.com/orchestral/tenanti works with 5 – user993553

答えて

1

これは、これを実行するほぼ最良の方法です。とにかく、それはすべての意見です。ただし、サブドメインごとに構成ファイルに接続を作成します。次に、connectSubdomainDatabase()関数で、データベース名を渡す代わりに現在のサブドメインを取得します。 laravelですでに接続を指定することができます。データベース名を使用する必要があるのはconfigファイルだけです。

ので、このような何か:

// To connect with a subdomain - the entry will be in config/database.php. 
public static function connectSubdomainDatabase() 
{ 
    // Break apart host 
    $urlParts = explode('.', $_SERVER['HTTP_HOST']); 

    // Change default connection 
    Config::set('database.default', $urlParts[0]); 
} 

どこのconfig/database.phpでの接続は、次のとおりです。

'connections' => [ 

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

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

    ], 
+0

ありがとう、私は同じ@mikelをしました。私はここで答えを与えるのを忘れた。それが他の人を助けることを望みます。 –

関連する問題