2015-10-18 18 views
5

tworzę aplikacji multi-tenant, w którym w oparciu o subdomeny, łączę się z bazą danych tego konkretnego najemcy.Najlepszy sposób na podłączenie wielu baz danych w laravel

Oto kod, aby to zrobić:

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

Czy to najlepszy sposób, aby połączyć się z bazą danych czy jest jakiś problem, bo mam na myśli z punktu widzenia wydajności, ponieważ za każdym razem Łączę z bazą danych, gdy istnieją różne poddomeny. Jaki jest najlepszy sposób na zrobienie tego?

+0

Jeśli można użyć udostępnionego db wielu najemców wzór niektóre prace zostały wykonane dla laravel . https://github.com/AuraEQ/laravel-multi-tenant – user993553

+0

@ user993553 Tak, sprawdziłem, że wcześniej, ale jak już wspomniałem w moim tagu chcę go dla Laravel-5.1, a pakiet jest z 4.2+ –

+0

Znalazłem następną https: //github.com/orchestral/tenanti współpracuje z 5 – user993553

Odpowiedz

1

To jest prawie najlepszym sposobem, aby to zrobić. W końcu to i tak opinia. Jednak utworzyłbym połączenie w pliku konfiguracyjnym dla każdej z subdomen. Następnie, w funkcji connectSubdomainDatabase(), pobierałbym bieżącą subdomenę zamiast podania nazwy bazy danych. Możesz już określić połączenie w laravel, jedyne miejsce, w którym powinieneś używać nazw baz danych, znajduje się w pliku konfiguracyjnym.

Tak, coś takiego:

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

Jeżeli config/database.php połączenia jest:

'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

Dziękuję za odpowiedź, zrobiłem to samo @mikel. zapomniałem dać odpowiedź tutaj. Mam nadzieję, że pomoże innym. –

Powiązane problemy