저는 많은 세입자를위한 신청서를 작성하고 각 세입자는 자신의 데이터베이스를 가지고 있습니다. 데이터베이스의 이름은 테넌트 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로 로그인 할 때 데이터가 표시되지 않아야합니다. 도움을 주셔서 미리 감사드립니다.
위의 사항이 변경되었지만 데이터가 여전히 표시되지만 임차인의 데이터베이스는 완전히 비어 있습니다. 그 외에도 구성이 id = 1 인 사용자 만있을 때 어떻게 두 번째 및 세 번째 사용자를 추가 할 수 있습니까? – Novy
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
멀티 테넌트 단일 데이터베이스 구현에 성공했습니다. 유용한 예제를 가져 주셔서 감사합니다. 응용 프로그램을 다중 데이터베이스 시스템으로 만들려면 많은 수정이 필요합니까? 각 사용자는 적어도 4 개의 큰 테이블을 가지고 있습니다. (따라서 각각 100 만 개가 넘는 행). 따라서 최상의 솔루션은 다중 데이터베이스 시스템을 갖는 것입니다. 내가 틀렸다면 나를 바로 잡아라. – Novy