Я создаю мультитенантное приложение Laravel (под управлением MariaDB 10.4.13) и застрял там, где мне нужно переключить базы данных и выполнить миграции для нового клиента. Основываясь на моем исследовании, я мог придумать следующий код для изменения подключений к базе данных для клиента:
Config::set('database.connections.mysql.host', $tenant->main_db_host);
Config::set('database.connections.mysql.database', $tenant->main_db_database);
Config::set('database.connections.mysql.username', $tenant->main_db_username);
Config::set('database.connections.mysql.password', $tenant->main_db_password);
DB::purge('mysql');
DB::reconnect('mysql');
Я протестировал этот фрагмент кода в консоли Tinker, сказав DB::connection()->getDatabaseName()
, который печатает ожидаемое имя, поэтому я должен предположить, что эта часть «работает».
Проблема в том, что я добавляю вызов Artisan::call('migrate');
для синхронизации c схемы базы данных. Это дает мне ошибку:
Database hosts array is empty. (SQL: select * from information_schema.tables where table_schema = ? and table_name = migrations and table_type = 'BASE TABLE')
Я просто не уверен, что здесь не так.