先决条件
在我的本地环境中,我正在与多个租户和 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']
);
Problem
但是,现在我发现查询生成器存在问题,保持或回退到基本连接。
我得到的预期连接结果租户_foo(Redis 也一样)当我运行时
dd(config()->get('database.connections.mysql'));
我得到了错误但显然有效的结果基本的_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 artisan 配置:缓存
- php artisan 缓存:清除
- php artisan 路线:明确
- php artisan 视图:清晰
- php artisan 优化
- 作曲家转储自动加载
只需将数据库名称更改为租户_foo像下面这样是不够的,因为配置数组保持不变基本的_foo.
\DB::connection()->setDatabaseName('tenant_foo');
Thoughts
- 我想更改配置数组\DB::连接(),但我不知道除了 config->set() 之外的其他方法。
- 我安装了 Telescope 这会影响数据库连接吗?
- 还有其他想法吗?