今天需要在一個地方連續切換資料庫,所以連帶的也要設定database config,但發生db table not found的狀況,dd了config發現沒有設定錯誤。
查了stackoverflow才知道,laravel似乎有個binding的機制,如果基於一開始的config建立連線,那這個連線就會持續存在,之後不管是eloquent還是db connection都會基於這個連線運行sql,即使之後調整了config也一樣:
這裡的解決方式:
這樣一來就會連接到之後設定的config了。
參考資料:
https://stackoverflow.com/questions/35466362/laravel-5-changing-database-name-in-runtime
查了stackoverflow才知道,laravel似乎有個binding的機制,如果基於一開始的config建立連線,那這個連線就會持續存在,之後不管是eloquent還是db connection都會基於這個連線運行sql,即使之後調整了config也一樣:
$page = Page::find(1);
// 設定另外一個config
config([ 'database.connections.mysql.host' => $hostname, 'database.connections.mysql.username' => $username, 'database.connections.mysql.password' => $password, 'database.connections.mysql.database' => $database, 'database.connections.mysql.charset' => $char_set ]);// 原本的db沒有orders table,發生錯誤
$order = Order::find(1);
這裡的解決方式:
$page = Page::find(1);
// disconnect 連線
DB::disconnect('mysql');
// 設定另外一個config
config([ 'database.connections.mysql.host' => $hostname, 'database.connections.mysql.username' => $username, 'database.connections.mysql.password' => $password, 'database.connections.mysql.database' => $database, 'database.connections.mysql.charset' => $char_set ]);// 原本的db沒有orders table,發生錯誤
$order = Order::find(1);
這樣一來就會連接到之後設定的config了。
參考資料:
https://stackoverflow.com/questions/35466362/laravel-5-changing-database-name-in-runtime