+1 voor @morphatic antwoord, het is vrij nauwkeurig voor de meeste dingen.
Migratie
Voor uw hoofddatabase zou u de standaard database/migration
moeten kunnen gebruiken en gebruik php artisan make:migration
en php artisan migrate
.
Tenanti zal echter het migratiepad gebruiken dat is ingesteld onder de "stuurprogramma"-configuratie. bijvoorbeeld:
'path' => database_path('tenanti/user'),
In dit geval wordt de migratie gemaakt/gemigreerd vanuit database/tenanti/user
(u kunt een andere map kiezen en deze zal die map gebruiken). Zodra je dit hebt ingesteld, kun je een nieuw migratiebestand voor de gebruiker-tenant maken via php artisan tenanti:make user create_blogs_table
(als voorbeeld) en voer de migratie uit via php artisan tenanti:migrate user
(zie de overeenkomst tussen het Laravel-migratiecommando en Tenanti?).
Bestuurder
Stuurprogramma is slechts het groeperen van een huurder, u kunt het misschien groeperen op gebruikers, bedrijven of team enz. En het is mogelijk dat u meer dan één type groep per project nodig heeft, anders gebruikt u meestal slechts één " groep" of "chauffeur".
Verificatie of toegang tot DB
Allereerst moet u overwegen hoe u van plan bent om elke huurder te onderscheiden. Meestal zie ik dat mensen de neiging hebben om voor een subdomein te kiezen. In dit geval moet u dus controleren of het subdomein tot een van de gebruikers behoort (door de hoofddatabase te doorzoeken) met behulp van een middleware en vervolgens verbinding maken met de database die bij de gebruiker hoort.
Tenanti beheert dat deel van het proces niet, omdat iedereen op dat aspect een andere stijl heeft, maar we bieden wel een code om dynamisch verbinding te maken met uw databasetenant vanuit een basisdatabaseconfiguratie.
Stel dat u de volgende configuratie heeft:
<?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' => [ ... ],
];
U kunt de stap volgen die beschikbaar is in https://github.com/orchestral/ tenanti#multi-database-connection-setup en voeg de volgende code toe.
<?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;
});
}
}
Dit zou ervoor zorgen dat u tenant_1
. gebruikt database voor gebruiker=1, tenant_2
database voor user=2 enzovoort.
Dit is waar je logica in je middleware moet toevoegen.
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');