Orchestral/tenanti 多数据库
Orchestral/tenanti multi database
我为许多租户构建了一个应用程序,每个租户都有自己的数据库。数据库的名称与租户id相同。(id存在于五个数字中)。身份验证后,用户应连接到他自己的数据库并重定向到他的仪表板。
我尝试使用以下代码将用户与其数据库连接起来,我将其放在 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,
],
],
应用服务提供商:
<?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 登录时我不应该看到任何数据。在此先感谢您的帮助。
配置应该是:
'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::setupMultiDatabase()
替换为 Tenanti::connection()
(我们已弃用旧方法)。
并更改以下内容:
Tenanti::driver('user')->asDefaultConnection(Auth::user(), 'tenants_{id}');
显然,如果您想使用 users_{id}
,则需要将所有 tenants
替换为 users
。
我为许多租户构建了一个应用程序,每个租户都有自己的数据库。数据库的名称与租户id相同。(id存在于五个数字中)。身份验证后,用户应连接到他自己的数据库并重定向到他的仪表板。
我尝试使用以下代码将用户与其数据库连接起来,我将其放在 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,
],
],
应用服务提供商:
<?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 登录时我不应该看到任何数据。在此先感谢您的帮助。
配置应该是:
'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::setupMultiDatabase()
替换为 Tenanti::connection()
(我们已弃用旧方法)。
并更改以下内容:
Tenanti::driver('user')->asDefaultConnection(Auth::user(), 'tenants_{id}');
显然,如果您想使用 users_{id}
,则需要将所有 tenants
替换为 users
。