【问题标题】:Artisan::call('migrate') error in multi-tenant app: Database hosts array is empty多租户应用程序中的 Artisan::call('migrate') 错误:数据库主机数组为空
【发布时间】: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


【解决方案1】:

只是想发布我自己的答案并将其关闭,因为这是我自己的错误。从我发布的代码中不清楚,因为函数调用的顺序不同,但我在数据库详细信息出现在租户模型实例上之前进行了migrate 调用。在我将此呼叫转移到$tenant->save() 后,它按预期工作。傻我。 :(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    相关资源
    最近更新 更多