+1 till @morfatiskt svar, det är tyst noggrant på det mesta.
Migrering
För din huvuddatabas bör du kunna använda standard database/migration
och använd php artisan make:migration
och php artisan migrate
.
Tenanti kommer dock att använda migreringsvägen som ställts in under "drivrutin"-konfigurationen. t.ex.:
'path' => database_path('tenanti/user'),
I det här fallet kommer migreringen att skapas/migreras från database/tenanti/user
(du kan välja en annan mapp och den kommer att använda den mappen). När du har ställt in detta kan du skapa en ny migreringsfil för användarens klient via php artisan tenanti:make user create_blogs_table
(som ett exempel) och kör migrering via php artisan tenanti:migrate user
(ser du likheten mellan Laravels migrationskommando och Tenanti?).
Drivrutin
Drivrutinen är bara grupperingen av en hyresgäst, du kanske grupperar den efter användare, företag eller team etc. Och det finns möjlighet att du kan behöva mer än en typ av grupp per projekt, annars använder du oftast bara enstaka " grupp" eller "förare".
Autentisering eller åtkomst till DB
Först och främst måste du överväga hur du planerar att särskilja varje hyresgäst. För det mesta skulle jag se att folk tenderar att välja underdomän. Så i det här fallet måste du kontrollera om underdomänen tillhör någon av användarna (genom att fråga i huvuddatabasen) med hjälp av ett mellanprogram och sedan ansluta till databasen som tillhör användaren.
Tenanti hanterar inte den delen av processen, eftersom alla har olika stil på den aspekten, men vi tillhandahåller en kod för att dynamiskt ansluta till din databashyresgäst från en basdatabaskonfiguration.
Låt säga att du har följande konfiguration:
<?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' => [ ... ],
];
Du kan följa steget som är tillgängligt i https://github.com/orchestral/ tenanti#multi-database-connection-setup och lägg till följande kod.
<?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;
});
}
}
Detta skulle säkerställa att du använder tenant_1
databas för user=1, tenant_2
databas för user=2 och så vidare.
Det är här du behöver lägga till logik i din mellanprogramvara.
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');