为了账号安全,请及时绑定邮箱和手机立即绑定

更改配置后 Laravel DB 连接不刷新

更改配置后 Laravel DB 连接不刷新

PHP
守着星空守着你 2023-05-26 15:24:29
这是我指定的数据库连接。'mysql_test' => [          'driver' => 'mysql',          'host' => env('DB_HOST', '127.0.0.1'),          'port' => env('DB_PORT', '3306'),          'database'=> '',          'username' => env('DB_USERNAME', 'forge'),          'password' => env('DB_PASSWORD', ''),          'unix_socket' => env('DB_SOCKET', ''),          'charset' => 'utf8mb4',          'collation' => 'utf8mb4_unicode_ci',          'prefix' => '',          'prefix_indexes' => true,          'strict' => true,          'engine' => null,      ],现在我正在尝试更改database代码中的值,然后像这样连接到数据库 for( $i = 1; $i <=4 ; $i++)    {      $db='test_'.$i;    DB::connection('mysql_test')->statement('CREATE DATABASE '.$db.';' );   Config::set('database.connections.mysql_test.database' , $db);    error_log(config('database.connections.mysql_test.database'));    DB::reconnect('mysql_test');    error_log(DB::connection('mysql_test')->getDatabaseName());  }config价值正在改变,就像第一次一样error_log,我正在改变我的config价值。但是,当我使用更新后的配置再次连接回同一个连接时,我没有得到我的数据库名称。连接未关联到任何数据库。
查看完整描述

6 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

您可以尝试purge连接,以便断开连接并将其从数据库管理器的缓存中删除:


...


Config::set('database.connections.mysql_test.database', $db);


DB::purge('mysql_test');


dump(DB::connection('mysql_test')->getDatabaseName());


查看完整回答
反对 回复 2023-05-26
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

配置值更改后需要重新连接数据库

DB::reconnect("mysql_test");


查看完整回答
反对 回复 2023-05-26
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

DB::Purge() 为我修复了它。看起来这是 Laravel 8.x 升级后需要的。在 Laravel 任务确实在需要时切换数据库连接之前。经过一些更新后,他们不再这样做了。



查看完整回答
反对 回复 2023-05-26
?
FFIVE

TA贡献1797条经验 获得超6个赞

DB::setDefaultConnection($connectionName);

为我解决了这个问题。(v8.48)

不需要清除或刷新。


查看完整回答
反对 回复 2023-05-26
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

我在 Laravel 5.7 上遇到了同样的问题


就我而言DB::purge('mysql_test'),DB::reconnect("mysql_test")也没有用,所以我这样做了:


$db_connection_name = 'mysql_test'; // Connection name that i wanted to connect

Config::set('database.default', $db_connection_name);


查看完整回答
反对 回复 2023-05-26
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

这应该更有效,因为它不必重新连接到数据库。


DB::table("products")->get(); //tenant A

DB::statement("use tenant_b");

DB::table("products")->get(); //tenant B


查看完整回答
反对 回复 2023-05-26
  • 6 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信