2017-03-01 8 views
0

私のアプリ内には私とは異なるビジネスがあり、それらには多数のユーザーがいます。 例えば:Laravel - マルチテナントアプリケーションでダイナミックデータベース接続を設定する

  • ビジネスA持っているユーザーA、ユーザーBとよびUserC
  • ビジネスB持ちUSERDなどUserE

そして...

各事業は独自の個別のデータベースを持っています、ユーザーA、B、Cは同じデータベースにアクセスし、ユーザーDとEは異なるデータベースにアクセスします(すべてのテナントデータベースは同じ構造ですが、データが異なります)。

各ユーザーにこの情報を持つメインデータベースがあるため、ユーザーがどのデータベースに属しているかわかります。

'main' => array(
    'driver' => 'mysql', 
    'host'  => 'hostname', 
    'database' => 'main_database', 
    'username' => 'username', 
    'password' => 'password', 
    'prefix' => '', 
), 

'tenant' => array(
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'database' => DYNAMIC_DATABASE_NAME_GOES_HERE, 
    'username' => 'username', 
    'password' => 'password', 
    'prefix' => '', 
), 

私はLaravelで次の操作を実行する方法を見つける必要があります:私はメインのデータベースを使用してユーザーデータベース識別子/データベース名を取得し、ログインした後にアプリ

  • にで

    1. ユーザー兆し接続
    2. "テナント"と呼ばれる接続内にその特定のデータベース名を設定します
    3. アプリケーションはそのテナント接続を使用してその特定のデータをロードします ユーザー/ busi ness

    これをLaravel 5.4でどのように達成できますか?

  • 答えて

    1

    このlinkは、あなたが探しているものの非常に良い例です。

    1)データベース設定で2つの接続を設定します。

    'main' => array(
        'driver' => 'mysql', 
        'host'  => 'hostname', 
        'database' => 'database', 
        'username' => 'username', 
        'password' => 'password', 
        'prefix' => '', 
    ), 
    
    'tenant' => array(
        'driver' => 'mysql', 
        'host'  => '', 
        'database' => '', 
        'username' => '', 
        'password' => '', 
        'prefix' => '', 
    ) 
    

    2)DBを切り替えるには、フィルタまたはミドルウェアに次のコードを入力します。データベース接続情報のモデルがTenantであることを考慮してください。

    $tenant = Tenant::whereSubDomain($subdomain)->first(); 
    
    Config::set('database.connections.tenant.host', $tenant ->host); 
    Config::set('database.connections.tenant.username', $tenant ->username); 
    Config::set('database.connections.tenant.password', $tenant ->password); 
    Config::set('database.connections.tenant.database', $tenant ->database); 
    
    //If you want to use query builder without having to specify the connection 
    Config::set('database.default', 'tenant'); 
    \DB::purge('tenant'); 
    \DB::reconnect('tenant'); 
    
    dd(\DB::connection('tenant')); 
    

    3)お使いのモデルで次の値を指定し

    //On models dealing with the main DB 
    protected $connection = 'main'; 
    
    //On models dealing with tenant DBs 
    protected $connection = 'tenant'; 
    
    関連する問題