+1 til @morfatisk svar, det er stille præcist på de fleste ting.
Migrering
For din hoveddatabase bør du være i stand til at bruge standard database/migration
og brug php artisan make:migration
og php artisan migrate
.
Tenanti vil dog bruge migreringsstien indstillet under "driver"-konfigurationen. f.eks.:
'path' => database_path('tenanti/user'),
I dette tilfælde vil migreringen blive oprettet/migreret fra database/tenanti/user
(du kan vælge en anden mappe, og den vil bruge den mappe). Når du har konfigureret dette, kan du oprette en ny migrationsfil til brugerlejeren via php artisan tenanti:make user create_blogs_table
(som et eksempel) og kør migrering via php artisan tenanti:migrate user
(Se ligheden mellem Laravel-migreringskommandoen og Tenanti?).
Driver
Driver er bare grupperingen af en lejer, du grupperer den måske efter brugere, virksomheder eller team osv. Og der er mulighed for, at du kan kræve mere end én type gruppe pr. projekt, ellers bruger du det meste af tiden kun en enkelt " gruppe" eller "chauffør".
Godkendelse eller adgang til DB
Først og fremmest skal du overveje, hvordan du planlægger at skelne hver enkelt lejer. Det meste af tiden vil jeg se, at folk har en tendens til at vælge underdomæne. Så i dette tilfælde skal du kontrollere, om underdomænet tilhører nogen af brugerne (ved at forespørge i hoveddatabasen) ved hjælp af en middleware og derefter oprette forbindelse til databasen, der tilhører brugeren.
Tenanti administrerer ikke den del af processen, fordi alle har forskellig stil på det aspekt, men vi leverer en kode til dynamisk at oprette forbindelse til din databaselejer fra en basisdatabasekonfiguration.
Lad os sige, at du har følgende 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ølge det tilgængelige trin i https://github.com/orchestral/ tenanti#multi-database-connection-setup og tilføj følgende kode.
<?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;
});
}
}
Dette ville sikre, at du bruger tenant_1
database for bruger=1, tenant_2
database for user=2 og så videre.
Det er her, du skal tilføje logik i din middleware.
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');