Я работаю над созданием системы с использованием основной базы данных и нескольких баз данных клиентов в laravel 5. У меня нет проблем с миграцией базы данных и начальным значением для основной базы данных, используя php artisan migrate:refresh --seed
.
После регистрации арендаторы получают собственную базу данных. Мне нужно запустить миграцию и заполнение базы данных клиентов.
Файлы миграции клиента хранятся в отдельной папке. Миграция запускается (к сожалению, в основной базе данных) с помощью следующей команды
\Artisan::call('migrate', [
'--path' => "database/migrations_system"
);
Однако мне нужно, чтобы миграция произошла в базе данных клиентов, скажем, DB_1.
Я читал, что следующее должно работать
\Artisan::call('migrate', [
'--path' => "database/migrations_system",
'--database' => 'db_1'
]);
Однако я получаю ошибку
InvalidArgumentException in DatabaseManager.php line 238:
База данных [db_1] не настроена.
Застрял .... Как я могу указать, что миграция будет выполняться в конкретной базе данных?
ОБНОВИТЬ:
Я обнаружил, что изменение config/database.php
и добавление db_1 избавляет меня от этой ошибки ....
'db_1' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => 'db_1',
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'pass'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'port' => '3306'
],
Однако эта связь неизвестна, и ее нужно делать на лету, и я тоже застрял в том, как это сделать ...
ОБНОВЛЕНИЕ Опять и рабочее решение .... Модифицируйте конфиг на лету ...
$connections = \Config::get('database.connections');
$tenant_database = 'db_1'; //assign from your main database
$tenant_connection = [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => $tenant_database ,
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'port' => '3306'
];
$connections['tenant'] = $tenant_connection;
\Config::set('database.connections', $connections);
\Artisan::call('migrate', [
'--path' => "database/migrations_system",
'--database' => 'tenant'
]);
Похоже, я ответил на свой вопрос, но, возможно, кто-то может прокомментировать эту процедуру.