2015-10-18 7 views
5

Ich erstelle eine Multi-Tenant-Anwendung, in der ich, basierend auf der Subdomain, eine Verbindung zu einer Datenbank dieses bestimmten Mandanten herstelle.Die beste Möglichkeit, mehrere Datenbanken in Laravel zu verbinden

Hier Code zu tun, dass:

// 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'); 
    } 

ist es der beste Weg, um mit einer Datenbank zu verbinden oder ist es ein Problem, weil ich aus der Sicht der Performance denke, weil jedes Mal, wenn ich anschließe mit der Datenbank, wenn es verschiedene Subdomains gibt. Was ist der beste Weg, das zu tun?

+0

Wenn Sie den gemeinsamen db Multi Tenant Muster einige Arbeit für Laravel getan wurde, verwenden könnte . https://github.com/AuraEQ/laravel-multi-tenant – user993553

+0

@ user993553 Ja, ich habe das vorher überprüft, aber wie ich in meinem Tag erwähnt habe ich will es für Laravel-5.1 und Paket ist von 4.2 + –

+0

Gefunden ein anderes https: //github.com/orchestral/tenanti arbeitet mit 5 – user993553

Antwort

1

Dies ist fast der beste Weg, dies zu tun. Am Ende ist es sowieso alles Meinung. Ich würde jedoch eine Verbindung in der Konfigurationsdatei für jede der Subdomains erstellen. Dann würde ich in Ihrer Funktion connectSubdomainDatabase() die aktuelle Subdomäne erhalten, anstatt einen Datenbanknamen zu übergeben. Sie können bereits eine Verbindung in Laravel angeben, der einzige Ort, an dem Sie Datenbanknamen verwenden sollten, befindet sich in der Konfigurationsdatei.

So etwas wie folgt aus:

// 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]); 
} 

Wo die config/database.php Verbindungen ist:

'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

Vielen Dank für Sie antworten, ich habe das gleiche @ mikel. Ich habe vergessen, hier Antwort zu geben. Hoffe es wird anderen helfen. –