多くのテナント用のアプリケーションを構築しており、各テナントには独自のデータベースがあります。データベースの名前は、テナント 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 でログインしてもデータは表示されません。助けてくれてありがとう。