@morphaticの答えに+1、それはほとんどのもので静かに正確です。
移行
メインデータベースには、デフォルトのdatabase/migration
を使用できるはずです。 php artisan make:migration
を利用します およびphp artisan migrate
。
ただし、Tenantiは、「ドライバー」構成で設定された移行パスを使用します。例:
'path' => database_path('tenanti/user'),
この場合、移行はdatabase/tenanti/user
から作成/移行されます。 (他のフォルダーを選択すると、そのフォルダーが使用されます)。これを設定すると、php artisan tenanti:make user create_blogs_table
を介してユーザーテナントの新しい移行ファイルを作成できます。 (例として)php artisan tenanti:migrate user
を介して移行を実行します (Laravel移行コマンドとTenantiの類似点を参照してください?)
ドライバー
ドライバーは単なるテナントのグループ化であり、ユーザー、企業、チームなどでグループ化する場合があります。また、プロジェクトごとに複数のタイプのグループが必要になる可能性があります。それ以外の場合は、ほとんどの場合、単一の「グループ」または「ドライバー」。
認証またはDBへのアクセス
まず、各テナントをどのように区別するかを検討する必要があります。ほとんどの場合、人々はサブドメインを選ぶ傾向があります。したがって、この場合、ミドルウェアを使用してサブドメインがいずれかのユーザーに属しているかどうかを確認してから(メインデータベースにクエリを実行して)、ユーザーに属するデータベースに接続する必要があります。
Tenantiはプロセスのその部分を管理しません。これは、その側面でスタイルが異なるためですが、基本データベース構成からデータベーステナントに動的に接続するためのコードを提供しています。
次の設定があるとします:
<?php
return [
'fetch' => PDO::FETCH_CLASS,
'default' => 'primary',
'connections' => [
'primary' => [
//
],
'tenants' => [
'driver' => 'mysql',
'host' => 'dbhost', // for user with id=1
'username' => 'dbusername', // for user with id=1
'password' => 'dbpassword', // for user with id=1
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
],
],
'migrations' => 'migrations',
'redis' => [ ... ],
];
https://github.com/orchestral/で利用可能な手順に従うことができますTenanti#multi-database-connection-setup 次のコードを追加します。
<?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'] = "tenant_{$entity->getKey()}";
return $template;
});
}
}
これにより、tenant_1
を使用していることが保証されます user =1のデータベース、tenant_2
user=2などのデータベース。
ここで、ミドルウェアにロジックを追加する必要があります。
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');