Лучший способ подключения нескольких баз данных в 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');
     }

Это лучший способ связаться с база данных или есть какие-либо проблемы, потому что я думаю с точки зрения производительности, потому что каждый раз, когда я подключаюсь к базе данных, когда существуют разные поддомены. Каков наилучший из возможных способов сделать это?

Author: Peter Mortensen, 2015-10-18

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,
        ],

    ],
 1
Author: Mikel Bitson, 2015-11-05 20:58:33