2015-10-18 20 views
5

Sto creando un'applicazione multi-tenant in cui, in base al sottodominio, mi sto connettendo a un database di quel particolare titolare.Il modo migliore per connettere più database in Laravel

Ecco il codice per farlo:

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

E 'il modo migliore per connettersi con un database o c'è qualche problema che perché sto pensando da un punto di vista delle prestazioni, perché ogni volta Sto collegando con il database quando ci sono diversi sottodomini. Qual è il modo migliore per farlo?

+0

Se è possibile utilizzare il db modello inquilino più condiviso un certo lavoro è stato fatto per laravel . https://github.com/AuraEQ/laravel-multi-tenant – user993553

+0

@ user993553 Sì l'ho verificato prima ma come ho menzionato nel mio tag lo voglio per Laravel-5.1 e il pacchetto è di 4.2+ –

+0

Trovato un altro https: //github.com/orchestral/tenanti funziona con 5 – user993553

risposta

1

Questo è quasi il modo migliore per farlo. Alla fine, è comunque un'opinione. Tuttavia, vorrei creare una connessione nel file di configurazione per ciascuno dei sottodomini. Quindi, nella funzione connectSubdomainDatabase(), otterrei il sottodominio corrente invece di passare il nome di un database. Puoi già specificare una connessione in laravel, l'unico posto dove dovresti usare i nomi dei database è nel file di configurazione.

Quindi, qualcosa di simile:

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

Qualora il config/database.php connessioni è:

'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

Grazie per la risposta, ho fatto lo stesso @mikel. ho dimenticato di dare una risposta qui. Spero che aiuti gli altri. –