Laravel 5(.1)異なるアプリケーションに接続する必要がある場所でアプリケーションを作成しています。唯一の問題は、接続する必要があるデータベースなので、configでdatabase.phpを使用することはできません。動的に指定された接続の詳細で接続を行うのはコントローラーの役割です。
DBクラスの使用を含め、データベースへの新しい接続を作成するにはどうすればよいですか? (またはこれは可能ですか)
前もって感謝します!
最も簡単な解決策は、実行時にデータベース構成を設定することです。 Laravelは、これらの設定がconfig/database.php
ファイルから読み込まれることを期待する場合がありますが、後で設定または変更できないことを意味するわけではありません。
config/database.php
からロードされた設定は、database
としてLaravel config。に格納されます。つまり、config/database.php
内のconnections
配列は、 database.connections
。
したがって、次のようにこれらの接続を簡単にオーバーライド/変更できます。
Config::set("database.connections.mysql", [
"Host" => "...",
"database" => "...",
"username" => "...",
"password" => "..."
]);
以降、このmysql
接続を使用するEloquentモデルは、この新しいデータベース接続構成を使用します。
可能であれば、サービスプロバイダーでこれを行うことをお勧めします。
同じ問題に遭遇しました。
実行時にデータベース設定を実際に変更して使用できます。
Config()関数を使用して、追加の設定を行うか、既存の接続設定を上書きします。
config(['database.connections.mynewconnection' => {settings here}]);
これらの設定はキャッシュされることに注意してください。新しい設定を使用する必要がある場合は、使用する接続のDBキャッシュを削除してください。
DB::purge('mynewconnection');
使用されるデフォルトの接続を操作することもできます。これは、異なる接続で移行を使用し、使用された接続内の移行テーブルでそれらを追跡したい場合に便利です。またはもちろん他のクールなもの...
DB::setDefaultConnection('mynewconnection');
複数のMS Access DBファイルをMySQLにインポートするスクリプトでこの問題にも遭遇し、実行時に構成を編集することを提案するソリューションのいずれにも満足できませんでした。インポートしたいすべてのAccess DBファイルに対して新しい構成を動的に作成するのは、醜くて面倒でした。少し遊んだ後、私はLaravelを説得して次のように既存の接続のDBを切り替えるように説得しました。
$mysqlConn = DB::connection();
$mysqlConn->getPdo()->exec("USE $schemaName;");
$mysqlConn->setDatabaseName($schemaName);