Laravel 5.5 で接続先DBを動的に変更する
接続先のDBを動的に変更したい要件があったのですが、少々癖があって解決まで時間がかかったので備忘録としてメモしておきます。
具体的には、接続先ホストがユーザーの入力値によって変更されるとか、そんな感じです。
下記 stackoverflow で議論されているのですが、少々情報が古いので、現在のLTSである ver 5.5 で使えるように適宜脳内変換していきます。
参考
解決までに以下の3ページを参考にしました。
解決までの流れ
- 接続先のDBをデフォルトから切り替えるためには、
config/database.php
の中にあるconnections
のリスト内から変更先の設定('hoge'
とする)を選んで、DB::connection('hoge')->select([SQL]);
のようにする - 今回は動的に接続先を変更したいので、ユーザーからの入力値を使って
config/database.php
内のconnections
リストに新しい設定を追加し、それを使用して接続する、と考える - 動的にconfigをセットするためには
config
ヘルパに配列の形で設定値を渡せばOK。例えば、config/database.php
内のconnections
リストにfoo
という接続名の設定を追加したい場合は、config([database.connections.foo] => [接続先のホスト名、ポート番号などを配列で渡す]);
とする - 設定が追加できたら
DB::connections('foo')->select([SQL]);
で目的達成!
DBファサードを使用するときは use Illuminate\Support\Facades\DB;
するのをお忘れなく。
僕はconfig
ヘルパに渡す配列の database.connections.foo
の辺りでちょっとつまづきました。ドットで繋いでいく、覚えておいたほうが良さそうです。