私はこれを突き刺しているだけなので、注意してください:) DBを呼び出すたびに使用されるDatabaseManagerクラスには、メソッドがあり、拡張されています。ソースへのリンクは次のとおりです。DB :: connection()メソッドは、Illuminate \ Database\Connectionのインスタンスを返す必要があります。これらすべてから、次のように新しいユーザー接続を作成します。
$user = Auth::user();
DB::extend($user->username, function() use ($user) {
// $pdo = new PDO(); set this up how you see fit
return new Illuminate\Database\Connection($pdo, $user->databaseName, $tablePrefix);
});
個人的には、各ユーザーに新しいメソッドUser :: databaseConnection()を追加し、DatabaseManagerを拡張するときにそれを呼び出します。
DB::extend($user->username, function() use ($user) {
return $user->databaseConnection();
});
アプリケーション全体で、以下を介して登録ユーザーの接続を呼び出すことができるはずです。
DB::connection(Auth::user()->username);
アップデート
テナント接続を呼び出す頻度とタイミングによっては、IOCコンテナを使用することをお勧めします。
App::bind('tenantDB', function()
{
return DB::connection(Auth::user()->username);
});
App::make('tenantDB')->insert(...);
移行とシードを忘れました。移行の場合、ファイルパスを設定できます
php artisan migrate:make foo --path=app/migrations
したがって、Configクラスを使用してデフォルトのデータベースまたはDB :: setDefaultConnection($ username)を設定する場合、すべての移行とシードは現在の接続に対して行われると想定します。そのプロセスが完了したら、メインデータベースに戻すことができます。
アップデート2
Laravelの開発者は素晴らしく、私は間違いなくこれをもっと早くチェックしたいという衝動に駆られるべきでした。作成した任意のデータベース接続で移行とシードを実行できます。
artisan migrate --database='userConnectionName'
artisan db:seed --database='userConnectionName'
バリーの答えを見ると、それはおそらくDatabaseManagerを拡張するよりもかなり簡単です。
これらのコマンドのすべてのオプションを確認するには、次のコマンドを実行します。
artisan help migrate
artisan help db:seed