2017-10-16 54 views
1

私はログインテーブルと各ユーザーに対応するデータベース設定を持つマスターデータベースを持っています。ログイン時に、テーブルからdb設定のフェッチを動的に変更する必要があります。 db接続を変更できますが、これは維持されません。Laravelでデータベース接続を動的に変更

Config::set("database.connections.mysql", [ 
'driver' => 'mysql', 
"host" => $usr_host, 
"database" => $usr_database, 
"username" => $usr_username, 
"password" => $usr_password, 
... 
]); 

編集:設定/ database.phpで中 彼/彼女がアプリで登録したときの新しいデータベースをユーザーごとに作成されるので、私は定義された各ユーザーのデータベース接続を持っていけない

答えて

1

さてあなたは、ユーザーログインにデフォルトデータベースを使用し、データベース名の新しいフィールドを持つことができます。次に、別のデータベースを照会する必要があるときは、db接続を変更するだけです。あなたがここにそれについての詳細を読むことができ、この

$someModel = new SomeModel; 
$databaseName = "mysql2"; // Dynamically get this value from db 
$someModel->setConnection($databaseName); 
$something = $someModel->find(1); 

よう

何か。あなたは何ができるかlaravelで http://fideloper.com/laravel-multiple-database-connections

0

は、アプリケーションで操作を実行しようとしているときに、これらの接続は、あなたがそれらを使用することができ、ファイルのconf /データベースの接続配列の異なる接続を作成することです。

あなたはたとえば、クエリを実行する接続(「名前」)メソッドを使用する必要がありますクエリビルダまたは生expresionsを使用する場合:

$users = DB::connection('mysql') 
     ->table('users') 
     ->select(...) 
     ->get(); 

あなたが雄弁使用する場合は、指定することができます例えば、接続属性内のモデルファイルの接続の名前、:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    /** 
    * The connection name for the model. 
    * 
    * @var string 
    */ 
    protected $connection = 'mysql'; 
} 

問題の共同解決策uldファイルconf/databaseのユーザーに応じて異なる種類の接続を作成し、ユーザーがユーザーテーブルの列として使用する接続の名前を保存し、たとえば、ユーザーの接続の名前を取得するクエリ、:

$user = User::find(Auth::id()); 
$connection = $user->connection; 

$users = DB::connection($connection) 
                      ->table('users') 
                      ->select(...) 
                      ->get(); 

詳細:あなたが最初の設定を取得する必要があり

https://laravel.com/docs/5.5/eloquent#eloquent-model-conventions https://laravel.com/docs/5.5/database#read-and-write-connections

0

は...その後、特定のフィールドを変更しますそれを元に戻す。

$config = Config::get('database.connections.company'); 
$config['database'] = "company_tenant_$id"; 
$config['password'] = "test2123"; 
config()->set('database.connections.company', $config); 
+0

この設定は次のリクエストでデフォルトに変更されます – tyro

+1

ミドルウェアで行う必要があります... – ZeroOne

関連する問題