【发布时间】:2020-06-17 23:20:46
【问题描述】:
我正在构建一个 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'); 的调用以同步数据库架构时。这给了我错误:
Database hosts array is empty. (SQL: select * from information_schema.tables where table_schema = ? and table_name = migrations and table_type = 'BASE TABLE')
我只是不确定这里出了什么问题。
【问题讨论】:
-
您想在哪里使用这些代码?在控制器中还是在命令中还是在服务器的终端中?
-
@ChintanMirani 在控制器中,因为新租户可以随时注册,他们应该能够立即使用该应用程序。
-
@ChintanMirani 原来这是我自己的疏忽!抱歉,添麻烦了。请参阅下面的答案以获取愚蠢的解释。 :-)
标签: laravel mariadb multi-tenant