2016-08-03 4 views
1

저는 많은 세입자를위한 신청서를 작성하고 각 세입자는 자신의 데이터베이스를 가지고 있습니다. 데이터베이스의 이름은 테넌트 ID와 동일합니다 (ID는 5 개의 숫자 중 하나입니다). 인증 후 사용자는 자신의 데이터베이스에 연결되어 대시 보드로 리디렉션되어야합니다. 오케스트라/테넌트 멀티 데이터베이스

은 내가 Authenticate.php에 배치 다음 코드와 자신의 데이터베이스와 사용자를 연결하려고

if (!Auth::guest() && Auth::user()->tenant) { 
     $user = Auth::id(); 
     Tenanti::driver('user')->asDefaultDatabase($user, 'users_{id}'); 
     Config::set('database.connections.mysql.database', 'user_'.$user); 
    } 

는 IF 주요 데이터베이스에 문을 검사 로그인 한 사용자는 세입자 (부울 경우).

는 config/database.php에는 다음 코드가 포함

'tenants' => [ 
     'user_1' => [ 
      'driver' => 'mysql', 
      'host'  => 'localhost',  // for user with id=1 
      'database' => '86097',  // for user with id=1 
      'username' => 'root', // for user with id=1 
      'password' => 'root', // for user with id=1 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => false, 
      ], 
     ], 

AppServiceProvider :

<?php namespace App\Providers; 

use Orchestra\Support\Facades\Tenanti; 

class AppServiceProvider extends ServiceProvider 
{ 
    public function boot() 
{ 
    Tenanti::setupMultiDatabase('tenants', function (User $entity, array $template) { 
     $template['database'] = "user_{$entity->getKey()}"; 

     return $template; 
    }); 
} 
} 
?> 

나는 오류가 발생하지 않지만, 연결이 변경되지 않았습니다. 사용자 데이터베이스가 비어 있으므로 user_id = 1로 로그인 할 때 데이터가 표시되지 않아야합니다. 도움을 주셔서 미리 감사드립니다.

답변

1

구성은 다음과 같아야합니다보다 다른

'tenants' => [ 
    'driver' => 'mysql', 
    'host'  => 'localhost',  // for user with id=1 
    'database' => '86097',  // for user with id=1 
    'username' => 'root', // for user with id=1 
    'password' => 'root', // for user with id=1 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
    'strict' => false, 
], 

Tenanti::connection()Tenanti::setupMultiDatabase()를 교체하십시오 (우리는 기존의 방법을 사용되지 않은 경우).

Tenanti :: 드라이버 ('사용자') -> asDefaultConnection (인증 : 사용자(), 'tenants_ {ID를}');

그리고 다음을 변경

users_{id}을 사용하려면 tenantsusers으로 바꿔야합니다.

+0

위의 사항이 변경되었지만 데이터가 여전히 표시되지만 임차인의 데이터베이스는 완전히 비어 있습니다. 그 외에도 구성이 id = 1 인 사용자 만있을 때 어떻게 두 번째 및 세 번째 사용자를 추가 할 수 있습니까? – Novy

+0

https://github.com/orchestral/tenanti#setup-model-observer 읽어보기 솔직히 말해서, 많은 데이터베이스를 건너 뛰기 전에 단일 데이터베이스에서 멀티 테넌트를 구축하는 개념을 이해하는 것이 더 낫습니다. 한 번의 클릭으로 모든 것을 해결할 수 있습니다. 일부 코드 예제 : https://github.com/crynobone/todoist/compare/master...single-database https://github.com/crynobone/todoist/compare/single-database .. .multi-database p/s : 모든 것을 해결할 수있는 디자인이 아니기 때문에 불완전합니다. – crynobone

+0

멀티 테넌트 단일 데이터베이스 구현에 성공했습니다. 유용한 예제를 가져 주셔서 감사합니다. 응용 프로그램을 다중 데이터베이스 시스템으로 만들려면 많은 수정이 필요합니까? 각 사용자는 적어도 4 개의 큰 테이블을 가지고 있습니다. (따라서 각각 100 만 개가 넘는 행). 따라서 최상의 솔루션은 다중 데이터베이스 시스템을 갖는 것입니다. 내가 틀렸다면 나를 바로 잡아라. – Novy