2015-10-18 3 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 работает с 5 – user993553

ответ

1

Это почти лучший способ сделать это. В конце концов, это все мнение в любом случае. Однако я хотел бы создать соединение в файле конфигурации для каждого из поддоменов. Затем, в вашей функции connectSubdomainDatabase(), я бы получил текущий субдомен вместо передачи имени базы данных. Вы уже можете указать соединение в laravel, единственное место, где вы должны использовать имена баз данных, находится в файле конфигурации.

Так, что-то вроде этого:

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

Где конфиг/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. я забыл дать ответ здесь. Надеюсь, это поможет другим. –

Смежные вопросы