一尘不染

Laravel 6 config()-> get('database.connections.mysql')不匹配DB:connection()

redis

先决条件

在我的本地环境中,我正在与多个租户和Redis(需要身份验证)合作。
为了服务该项目,我正在使用Valet。

对于这种情况,我要解决以下两个连接:

- basic_foo (is defined in my .env)
- tenant_foo (is the one to change to during a request)

到目前为止,我成功更改了连接,如下所示:

config()->set('database.connections.mysql', 
       array_merge(
        config()->get('database.connections.mysql') , 
        ['database' => 'tenant_foo']
    );

问题

但是,现在我看到查询生成器出现问题,保持或退回到基本连接。

运行时,我得到了 tenant_foo 的预期连接结果(与Redis相同)

dd(config()->get('database.connections.mysql'));

我得到的错误,但显然积极结果 basic_foo 当我运行

dd(\DB::connection()); // returns Illuminate\Database\MySqlConnection

因此所有应用程序都将返回此Illuminate \ Database \ QueryException

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'basic_foo.table_bar' doesn't exist...

它应该在哪里搜索

'tenant_foo.table_bar'

尚未解决问题的事情

  • 重新启动Redis
  • 重新安装Redis
  • PHP的工匠配置:缓存
  • PHP的工匠缓存:清除
  • PHP的工匠路线:清除
  • php artisan视图:清除
  • PHP的工匠优化
  • 作曲家转储-自动加载

像下面这样简单地将数据库名称更改为 tenant_foo 是不够的,因为config数组仍然与 basic_foo 相同。

\DB::connection()->setDatabaseName('tenant_foo');

思想

  • 我想更改 \ DB :: connection() 的config-array ,但是除了config-> set()我不知道其他方法。
  • 我安装了Telescope会影响数据库连接吗?
  • 还有其他想法吗?

阅读 291

收藏
2020-06-20

共1个答案

一尘不染

要动态更改数据库名称,应使用:

DB::disconnect(); 
Config::set('database.mysql.database', 'tenant_foo'); 
DB::reconnect();
2020-06-20