Laravel多租户切换问题

时间:2019-02-27 07:46:17

标签: php laravel multi-tenant

我有一个情况。我有一个既有管理员又有租户的应用程序。在admin中,我们有用户管理,租户管理等模块。在租户中,我有用户管理和其他一些模块。
 在this link中,我已在AppServiceProvider中将默认连接设置为租户(仅在此之后,租户登录才起作用)。通过管理员创建租户时,我将this link中提到的连接切换到新创建的客户,并使用默认的 User 模型创建用户。该用户模型是默认模型,在此我没有使用租户连接特征。这将按预期在租户数据库中创建一个新用户。但是,当我尝试在另一个控制器中切换连接时,直到我使用具有租户特征的另一个CustomerUser模型,该切换才起作用。当我使用默认的用户模型时,获取的数据是从系统中获取的。我发现的唯一区别是切换上方的代码是

$website = new Website;
$website->uuid = $customer->domain_name;
app(WebsiteRepository::class)->create($website);
$hostname = new Hostname;
$serverName = $request->server->get('SERVER_NAME');
$hostname->fqdn = $website->uuid.'.'.$serverName;
$hostname = app(HostnameRepository::class)->create($hostname);
app(HostnameRepository::class)->attach($hostname, $website);
return $website->id;

我使用此返回的网站ID切换到租户。

但是当我尝试使用其他控制器时,切换代码是相同的,但是要获得网站,我使用了以下代码:

$customerWebsite = Customers::findOrFail($customerId)->website;
$uuid = $customerWebsite->uuid;
$website = app(WebsiteRepository::class)->findByUuid($uuid);

常用开关代码:

$tenancy = app(Environment::class);
$tenancy->tenant($website);

请提出解决此问题的方法。

1 个答案:

答案 0 :(得分:-1)

以下代码段可用于配置应用程序:

app(Environment::class)->tenant($hostname->website);
config(['database.default' => 'tenant']);