+1 pro odpověď @morphatic, je u většiny věcí zcela přesná.
Migrace
Pro vaši hlavní databázi byste měli být schopni použít výchozí database/migration
a použijte php artisan make:migration
a php artisan migrate
.
Tenanti však použije cestu migrace nastavenou v konfiguraci „ovladače“. např.:
'path' => database_path('tenanti/user'),
V tomto případě bude migrace vytvořena/migrována z database/tenanti/user
(můžete si vybrat jinou složku a ta použije tuto složku). Jakmile toto nastavíte, můžete vytvořit nový migrační soubor pro uživatelského tenanta pomocí php artisan tenanti:make user create_blogs_table
(jako příklad) a spusťte migraci pomocí php artisan tenanti:migrate user
(viz podobnost mezi příkazem migrace Laravel a Tenanti?).
Ovladač
Driver je pouze seskupení tenanta, můžete ho seskupovat podle uživatelů, společností nebo týmu atd. A existuje možnost, že budete potřebovat více než jeden typ skupiny na projekt, jinak většinou používáte pouze jeden " skupina“ nebo „řidič“.
Autentizace nebo přístup k DB
Nejprve musíte zvážit, jak plánujete rozlišovat jednotlivé nájemníky. Většinu času bych viděl, že lidé mají tendenci se rozhodovat pro subdoménu. Takže v tomto případě musíte zkontrolovat, zda subdoména patří některému z uživatelů (dotazem na hlavní databázi) pomocí middlewaru a poté se připojit k databázi, která patří uživateli.
Tenanti tuto část procesu nespravuje, protože každý má v tomto ohledu jiný styl, ale poskytujeme kód pro dynamické připojení k vašemu tenantovi databáze ze základní konfigurace databáze.
Řekněme, že máte následující konfiguraci:
<?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' => [ ... ],
];
Můžete postupovat podle kroku dostupného na https://github.com/orchestral/ tenanti#multi-database-connection-setup a přidejte následující kód.
<?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;
});
}
}
To by zajistilo, že používáte tenant_1
databáze pro uživatele=1, tenant_2
databáze pro uživatele=2 a tak dále.
Zde musíte do svého middlewaru přidat logiku.
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');