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 でログインしてもデータは表示されません。助けてくれてありがとう。

4

1 に答える 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::setupMultiDatabase()てください。Tenanti::connection()

そして、以下を変更します。

Tenanti::driver('user')->asDefaultConnection(Auth::user(), 'tenants_{id}');

明らかに、使用したい場合は、 allをusers_{id}に置き換える必要があります。tenantsusers

于 2016-08-04T10:00:37.760 に答える