2016-12-28 7 views
1

私は複数のデータベースシステムで作業しています。システムはクライアントのローカルmssqlサーバーを統合します。スキーマファサードでDB :: reconnect()?

マスターデータベースに資格情報を保存します。そして私は顧客のローカルデータベースにいくつかのテーブルを移行したい。

ご存知のように、以下のように接続を選択することができます。

Schema::connection('sqlsrv')->create('products', function (Blueprint $table) { 

}); 

しかし、私はそれを動的に使用する必要があります。

この接続は、私はDBファサードを使用して、それをやったのconfig/database.phpで

'connections' => [ 

    'sqlite' => [ 
     'driver' => 'sqlite', 
     'database' => env('DB_DATABASE', database_path('database.sqlite')), 
     'prefix' => '', 
    ], 

    'mysql' => [ 
     'driver' => 'mysql', 
     'host' => env('DB_HOST', 'localhost'), 
     'port' => env('DB_PORT', '3306'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'charset' => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix' => '', 
     'strict' => false, 
     'engine' => null, 
    ], 

    'sqlsrv' => [ 
     'driver' => 'sqlsrv', 
     'host'  => env('SQLSRV_HOST', 'localhost'), 
     'database' => env('SQLSRV_DATABASE', 'forge'), 
     'username' => env('SQLSRV_USERNAME', 'forge'), 
     'password' => env('SQLSRV_PASSWORD', ''), 
     'collation' => 'Turkish_CI_AS', 
     'charset' => 'utf8', 
     'prefix' => env('SQLSRV_PREFIX', ''), 
    ], 

    'pgsql' => [ 
     'driver' => 'pgsql', 
     'host' => env('DB_HOST', 'localhost'), 
     'port' => env('DB_PORT', '5432'), 
     'database' => env('DB_DATABASE', 'forge'), 
     'username' => env('DB_USERNAME', 'forge'), 
     'password' => env('DB_PASSWORD', ''), 
     'charset' => 'utf8', 
     'prefix' => '', 
     'schema' => 'public', 
    ], 

], 

から読み込みます。

public function getConnection($connection_id) 
{ 
    /** Bağlantı Bilgilerini Çeker */ 
    $connection = Connection::find($connection_id); 

    try 
    { 
     /** Bağlantı Ayarları */ 
     config()->set('database.connections.sqlsrv.host', $connection->host); 
     config()->set('database.connections.sqlsrv.database', $connection->db); 
     config()->set('database.connections.sqlsrv.username', $connection->username); 
     config()->set('database.connections.sqlsrv.password', $connection->password); 
     config()->set('database.connections.sqlsrv.charset', $connection->charset); 
     config()->set('database.connections.sqlsrv.collation', $connection->collation); 
     config()->set('database.connections.sqlsrv.prefix', $connection->prefix); 

     /** Ayarlar ile yeniden bağlanma */ 
     return DB::reconnect($connection->driver); 
    }catch (\Exception $e) 
    { 
     throw new \Exception($e); 
    } 
} 

スキーマファサードにはDB :: reconnect()のようなメソッドやソリューションがありますか?

+0

現在、このようなものを探しています。あなたはSchemaのための解決策を見つけましたか? –

+0

いいえ解決策がまだ見つかりません –

答えて

1

ここで私は何をしたのですか。あなたのケースを助けることを願っています。

// Erase the tenant connection, thus making Laravel 
    // get the default values all over again. 
    DB::purge('tenant'); 

    // Make sure to use the database name we want to establish a connection. 
    Config::set('database.connections.tenant.host', $company->database->main_server); 
    Config::set('database.connections.tenant.database', $company->mysql_database); 
    Config::set('database.connections.tenant.username', $company->mysql_username); 
    Config::set('database.connections.tenant.password', $company->mysql_password); 

    // Rearrange the connection data 
    DB::reconnect('tenant'); 

    // Ping the database. This will thrown an exception in case 
    // the database does not exists. 
    Schema::connection('tenant')->getConnection()->reconnect(); 

私はあなたがDB::purgeがいない場合は、スキーマは任意の接続変更を拾うことができないということに気づきました。

一方、パージを実行してもデータベースが存在しない場合、実際にデータベース接続で何かをしようとするまで、例外は発生しません。最後の行のreconnect()がその行をトリガーします。

関連する問題