2017-03-01 8 views
0

내 앱에는 사업이 다르며 많은 사용자가 있습니다. 예를 들면 :Laravel - 멀티 테넌트 애플리케이션에서 동적 데이터베이스 연결 설정

  • 비즈니스가 사용자 A, 사용자 B 및 UserC에게
  • 비즈니스 B가 userd에 등 UserE

그리고 ..

각 기업이 자신의 별도의 데이터베이스를 가지고, 따라서 사용자 A, B 및 C는 동일한 데이터베이스에 액세스하고 사용자 D 및 E는 다른 데이터베이스에 액세스합니다. 모든 테넌트 데이터베이스는 구조가 동일하며 데이터가 다릅니다.

각 사용자에 대해이 정보가있는 기본 데이터베이스가 있으므로 사용자가 속한 데이터베이스를 알고 있습니다. 나는 사용자 데이터베이스 식별자/데이터베이스 이름을 얻을

  • 로그인 한 후 앱에

    1. 사용자 징후를 주 데이터베이스를 사용 :

      '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에서 다음을 수행 할 수있는 방법을 찾을 필요 연결

    2. 는 "거주자"라고하는 연결의 특정 데이터베이스 이름이
    3. 앱이 세입자 연결이 특정 사용자/BUSI의 데이터를로드하는 것을 사용하는 설정 ness

    어떻게 이것을 Laravel 5.4에서 수행 할 수 있습니까?

  • 답변

    1

    link은 찾고있는 것의 아주 좋은 예입니다.

    1) 데이터베이스 구성에서 두 개의 연결을 설정하십시오.

    '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';