Лучший способ подключения нескольких баз данных в 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');
}
Это лучший способ связаться с база данных или есть какие-либо проблемы, потому что я думаю с точки зрения производительности, потому что каждый раз, когда я подключаюсь к базе данных, когда существуют разные поддомены. Каков наилучший из возможных способов сделать это?
1 answers
Это почти лучший способ сделать это. В конце концов, все равно это всего лишь мнение. Тем не менее, я бы создал соединение в файле конфигурации для каждого из поддоменов. Затем в вашей функции 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]);
}
Где 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,
],
],