Laravel 6 config()->get('database.connections.mysql') 不匹配 DB:connection()
Laravel 6 config()->get('database.connections.mysql') not matching DB:connection()
先决条件
在我的本地环境中,我与多个租户一起工作,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']
);
问题
但是,现在我发现查询构建器存在问题,保持或回退到基本连接。
当我 运行
dd(config()->get('database.connections.mysql'));
当我 运行
时,我得到 basic_foo 的错误但显然有效的结果
dd(\DB::connection()); // returns Illuminate\Database\MySqlConnection
所以总而言之,应用程序将 return 这个 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 config:cache
- php artisan cache:clear
- php artisan route:clear
- php artisan view:clear
- php artisan 优化
- 作曲家dump-autoload
像下面这样简单地将数据库名称更改为 tenant_foo 是不够的,因为配置数组与 basic_foo 相同。
\DB::connection()->setDatabaseName('tenant_foo');
想法
- 我想更改 \DB::connection() 的 config-array,但除了 config->set( ).
- 我安装了 Telescope 这会影响数据库连接吗?
- 还有其他想法吗?
要动态更改数据库名称,您应该使用:
DB::disconnect();
Config::set('database.mysql.database', 'tenant_foo');
DB::reconnect();
这对我有用:
\DB::disconnect('mysql');
Config::set('database.connections.mysql.database', 'tenant_foo');
\DB::reconnect('mysql');
先决条件
在我的本地环境中,我与多个租户一起工作,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']
);
问题
但是,现在我发现查询构建器存在问题,保持或回退到基本连接。
当我 运行
dd(config()->get('database.connections.mysql'));
当我 运行
时,我得到 basic_foo 的错误但显然有效的结果dd(\DB::connection()); // returns Illuminate\Database\MySqlConnection
所以总而言之,应用程序将 return 这个 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 config:cache
- php artisan cache:clear
- php artisan route:clear
- php artisan view:clear
- php artisan 优化
- 作曲家dump-autoload
像下面这样简单地将数据库名称更改为 tenant_foo 是不够的,因为配置数组与 basic_foo 相同。
\DB::connection()->setDatabaseName('tenant_foo');
想法
- 我想更改 \DB::connection() 的 config-array,但除了 config->set( ).
- 我安装了 Telescope 这会影响数据库连接吗?
- 还有其他想法吗?
要动态更改数据库名称,您应该使用:
DB::disconnect();
Config::set('database.mysql.database', 'tenant_foo');
DB::reconnect();
这对我有用:
\DB::disconnect('mysql');
Config::set('database.connections.mysql.database', 'tenant_foo');
\DB::reconnect('mysql');