Ошибка Artisan :: call ('migrate') в мультитенантном приложении: массив узлов базы данных пуст - PullRequest
0 голосов
/ 17 июня 2020

Я создаю мультитенантное приложение 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')

Я просто не уверен, что здесь не так.

1 Ответ

0 голосов
/ 17 июня 2020

Просто хотел опубликовать свой ответ и закрыть его, так как это была моя собственная ошибка. Из кода, который я опубликовал, не ясно, потому что порядок вызовов функций был другим, но я делал migrate call до , детали БД присутствовали в экземпляре модели Tenant. После того, как я переместил этот вызов на $tenant->save(), он заработал, как ожидалось. Я такой глупый. : (

...