更改配置后,Laravel DB连接未刷新

kcwpcxri  于 2023-01-27  发布在  其他
关注(0)|答案(6)|浏览(158)

这是我指定的数据库连接。

'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值。但当我使用更新后的配置再次连接回同一连接时,我没有获取数据库名称。连接没有与任何数据库关联。

guykilcj

guykilcj1#

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

...

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

DB::purge('mysql_test');

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

3pvhb19x2#

更改配置值后,需要重新连接数据库
DB::reconnect("mysql_test");

mwkjh3gx

mwkjh3gx3#

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

cunj1qz1

cunj1qz14#

我在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);
hwamh0ep

hwamh0ep5#

DB::setDefaultConnection($connectionName);

为我解决了问题。(v8.48)
不需要清除或刷新。

rdlzhqv9

rdlzhqv96#

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

DB::table("products")->get(); //tenant A
DB::statement("use tenant_b");
DB::table("products")->get(); //tenant B

相关问题