【问题标题】:Laravel 6 config()->get('database.connections.mysql') not matching DB:connection()Laravel 6 config()->get('database.connections.mysql') 不匹配 DB:connection()
【发布时间】:2020-04-22 03:50:11
【问题描述】:

先决条件

在我的本地环境中,我与多个租户和 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 artisan 缓存:清除
  • php 工匠路线:清除
  • php 工匠视图:清除
  • php 工匠优化
  • 作曲家转储自动加载

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

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

想法

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

【问题讨论】:

  • 缺少的引用 ' 是真正的 TYPO 还是您在创建问题时添加/遗漏的内容
  • 看看stackoverflow.com/a/25893646/3593996 - 也许会有所帮助
  • @leopold 我的意思是你应该试试这个:DB::disconnect(); Config::set('database.mysql.database', 'tenant_foo'); DB::reconnect();
  • @leopold 完成。不客气:)
  • @leopold php artisan config:cachecache:clear 确实做到了这一点。

标签: php laravel redis multi-tenant illuminate-container


【解决方案1】:

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

DB::disconnect(); 
Config::set('database.mysql.database', 'tenant_foo'); 
DB::reconnect();

【讨论】:

  • 在我的情况下不起作用!我的 laravel 版本是 5.6。请帮帮我!
猜你喜欢
  • 2020-05-02
  • 2014-11-04
  • 2015-04-27
  • 2019-06-30
  • 1970-01-01
  • 2015-01-18
  • 2016-12-09
  • 2016-06-11
  • 2014-01-09
相关资源
最近更新 更多