Laravel 6 config()-gt;get(#39;database.connections.mysql#39;) not matching DB:connection()(Laravel 6 config()-get(database.connections.mysql) 与 DB:connection() 不匹配)
问题描述
在我的本地环境中,我使用多个租户和 Redis(需要身份验证).
为了服务这个项目,我正在使用 Valet.
In my local environment I am working with multiple tenants and Redis (Auth required).
To serve the project I am using Valet.
对于这种情况,我要解决这两个连接:
For this case I am addressing these two connections:
- basic_foo (is defined in my .env)
- tenant_foo (is the one to change to during a request)
直到现在我成功地改变了连接:
Until now I successfully changed the connections like so:
config()->set('database.connections.mysql',
array_merge(
config()->get('database.connections.mysql') ,
['database' => 'tenant_foo']
);
问题
但是,现在我发现查询构建器存在问题,保持或回退到基本连接.
Problem
However, now I am seeing an issue with the query builder, keeping or falling back to the basic connection.
运行时得到tenant_foo的预期连接结果(Redis相同)
I get the expected connection results of tenant_foo (same for Redis) when I run
dd(config()->get('database.connections.mysql'));
当我运行时,basic_foo 的结果是错误的但显然是活跃的
I get the wrong but apparently active results of basic_foo when I run
dd(DB::connection()); // returns IlluminateDatabaseMySqlConnection
所以总而言之,应用程序将返回这个 IlluminateDatabaseQueryException
So all in all the app will return this IlluminateDatabaseQueryException
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 artisan route:clear
- php artisan view:clear
- php artisan 优化
- 作曲家转储自动加载
像下面那样简单地将数据库名称更改为 tenant_foo 是不够的,因为配置数组保持与 basic_foo 相同.
Simply changing the database name to tenant_foo like below is not enough, as the config array remains the same of basic_foo.
DB::connection()->setDatabaseName('tenant_foo');
想法
- 我想更改 DB::connection() 的配置数组,但我不知道除了 config->set() 之外的其他方法.
- 我安装了 Telescope 这会影响数据库连接吗?
- 还有其他想法吗?
- I want to change the config-array the of DB::connection(), but I don't know another way than the config->set().
- I installed Telescope could this affect the db connection?
- Any other ideas?
Thoughts
推荐答案
要动态更改数据库名称,您应该使用:
To dynamically change database name you should use:
DB::disconnect();
Config::set('database.mysql.database', 'tenant_foo');
DB::reconnect();
这篇关于Laravel 6 config()->get('database.connections.mysql') 与 DB:connection() 不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Laravel 6 config()->get('database.connections.mysql') 与 DB:connection() 不匹配
基础教程推荐
- 使用 PDO 转义列名 2021-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01
- HTTP 与 FTP 上传 2021-01-01
- PHP 守护进程/worker 环境 2022-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01