php - Laravel DB connection not refreshing after changing the config

This is my database connection which I have specified.
'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,
],
Now I am trying to change thedatabase
value from the code and then connection to the database like this
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
value is getting changed as on the firsterror_log
, I am getting my changedconfig
value. But when I connect back again to the same connection with the updated config, I am not getting my database name. Connection is not getting associated to any database.
Answer
Solution:
You can try topurge
the connection so it disconnects and removes it from the cache on the Database Manager:
...
Config::set('database.connections.mysql_test.database', $db);
DB::purge('mysql_test');
dump(DB::connection('mysql_test')->getDatabaseName());
Answer
Solution:
You need to reconnect the db after the config value is changed
DB::reconnect("mysql_test");
Answer
Solution:
DB::Purge() fixed it for me. It looks like this was needed after Laravel 8.x upgrade. Before the Laravel tasks did switch database connections when needed. After some update they did no longer.
Answer
Solution:
I faced same issue on Laravel 5.7
In my caseDB::purge('mysql_test')
andDB::reconnect("mysql_test")
also not worked so i did this:
$db_connection_name = 'mysql_test'; // Connection name that i wanted to connect
Config::set('database.default', $db_connection_name);
Answer
Solution:
This should be more efficient as it won't have to re-connect to the database.
DB::table("products")->get(); //tenant A
DB::statement("use tenant_b");
DB::table("products")->get(); //tenant B
Share solution ↓
Additional Information:
Link To Answer People are also looking for solutions of the problem: object not found by the @paramconverter annotation.
Didn't find the answer?
Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.
Similar questions
Find the answer in similar questions on our website.
Write quick answer
Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.