У меня была такая же проблема, как и у вас. Этот блог определенно может помочь вам.
Универсальное руководство для Laravel Multi Tenant с несколькими базами данных
Вот как выглядит файл config / database.php в зависимости от вашей ситуации. Поскольку второй является динамическим, нет необходимости определять базу данных.
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'blog'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'password'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => 'InnoDB',
],
'business' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => '',
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'password'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => 'InnoDB',
],
По сути, установите вспомогательную функцию базы данных, которая подключается к базе данных во время выполнения и затем вызывает ее в нужном промежуточном программном обеспечении. Я просто помещаю вспомогательный файл в database / utilities / helpers.php
function connect($hostname, $username, $password, $database)
{
// Erase the tenant connection, thus making Laravel get the default values all over again.
DB::purge('business');
// Make sure to use the database name we want to establish a connection.
Config::set('database.connections.tenant.host', $hostname);
Config::set('database.connections.tenant.database', $database);
Config::set('database.connections.tenant.username', $username);
Config::set('database.connections.tenant.password', $password);
// Rearrange the connection data
DB::reconnect('business');
// Ping the database. This will throw an exception in case the database does not exists.
Schema::connection('tenant')->getConnection()->reconnect();
}
Не забудьте сообщить композитору, что вспомогательную функцию можно использовать глобально, добавив эти строки в файл composer.json.
"autoload": {
"classmap": [
"database"
],
"files":[
"database/utilities/helpers.php"
],
"psr-4": {
"App\\": "app/"
}
},
Вы также хотите иметь статические и динамические модели, которые должны быть расширены, чтобы определить, какие соединения с базой данных использовать.
class StaticModel extends Model
{
protected $connection = 'mysql';
}
class DynamicModel extends Model
{
protected $connection = 'business';
}
В промежуточном программном обеспечении настроить динамическое соединение с базой данных в соответствии с именем базы данных.
connect(getenv('DB_HOST'), getenv('DB_USERNAME'), getenv('DB_PASSWORD'), getenv('DB_SYMBOL') . $databasename);
Таким образом, вы можете использовать модель как обычно, но она имеет динамические соединения с базой данных