2016-08-29 39 views
3

マルチテナントアプリケーションを使用して開発中Laravel-5.2 各テナントには個別のデータベースがあります。各テナントには別々のサブドメインがあります。サブドメインを使用してテナントを検出します。マルチテナント環境のLaravel tinker

セットアップモデルTenantDatabaseConnectionは、Tenant hasOne DatabaseConnectionDatabaseConnection belongsTo Tenantです。 テナントのDB接続は、BeforeMiddlewareから動的に設定されます。これらは完璧に機能します。

今、私はテナントにartisan tinkerを使用します。しかし、php artisan tinkerを実行すると、.envファイルにDB証明書が存在するTenantに接続します。

私は同じためにコンソールコマンドを作ろうとしています。これまでに私が達成したことがあります。

class ClientTinker extends Command { 

    protected $name = 'cdb:tinker'; 

    public function fire() 
    { 
     // get the subdomain 
     $subdomain = $this->argument('subdomain'); 

     // get the client 
     $client = Tenant::whereSubdomain($subdomain)->first(); 

     $connection = $client->databaseConnection(); 
     // $connection contains the database server, database name, user name, and password. 
     // dynamically set connections here. *How?* 
     ... 

     // *I need to call tinker here. How?* 
    } 

    protected function getArguments() 
    { 
     return [ 
      ['subdomain', InputArgument::REQUIRED, 'Subdomain of the tenant.'], 
     ]; 
    } 

どのようにして特定のテナントにDB接続を設定し、どのようにしてtinkerを実行できますか?

+0

http://stackoverflow.com/questions/31281669/how-do-i-connect-to-different-databases-at-run-time –

+0

コンソールコマンドを作成して特定のテナント? – linuxartisan

+0

はい。ですから、 'tinker'を実行する前に' .env'ファイルでDBクレデンシャルを変更する必要はありません。 –

答えて

2

あなたはfire()$connection変数を取得した後、これはあなたのために働く場合は、この

DB::purge('mysql'); 

Config::set('database.connections.mysql.host', $connection->server); 
Config::set('database.connections.mysql.database', $connection->database); 
Config::set('database.connections.mysql.username', $connection->username); 
Config::set('database.connections.mysql.password', $connection->password); 
// I am assuming the variable names in $connection object here, as you have not specified them in your question. 

Artisan::call('tinker'); 

を参照してくださいます。

+0

それは働いた。 Thanx –

関連する問題