+1 do @morfatycznej odpowiedzi, jest dość dokładna w większości rzeczy.
Migracja
W przypadku głównej bazy danych powinieneś być w stanie użyć domyślnej database/migration
i użyj php artisan make:migration
i php artisan migrate
.
Tenanti użyje jednak ścieżki migracji ustawionej w konfiguracji „sterownika”. np.:
'path' => database_path('tenanti/user'),
W takim przypadku migracja zostanie utworzona/przeniesiona z database/tenanti/user
(możesz wybrać inny folder i użyje tego folderu). Po skonfigurowaniu możesz utworzyć nowy plik migracji dla dzierżawcy użytkownika za pomocą php artisan tenanti:make user create_blogs_table
(jako przykład) i uruchom migrację za pomocą php artisan tenanti:migrate user
(zobacz podobieństwo między poleceniem migracji Laravel a Tenanti?).
Kierowca
Driver to po prostu grupowanie najemcy, może grupujesz go według użytkowników, firm lub zespołu itp. I istnieje możliwość, że możesz potrzebować więcej niż jednego typu grupy na projekt, w przeciwnym razie przez większość czasu używasz tylko jednego " grupa” lub „kierowca”.
Uwierzytelnianie lub dostęp do bazy danych
Przede wszystkim należy zastanowić się, w jaki sposób zamierzasz wyróżnić każdego najemcę. Przez większość czasu widziałem, jak ludzie wybierają subdomenę. Więc w tym przypadku musisz sprawdzić, czy subdomena należy do dowolnego użytkownika (poprzez odpytanie głównej bazy danych) za pomocą oprogramowania pośredniczącego, a następnie połączyć się z bazą danych należącą do użytkownika.
Tenanti nie zarządza tą częścią procesu, ponieważ każdy ma inny styl w tym aspekcie, ale zapewniamy kod do dynamicznego łączenia się z dzierżawcą bazy danych z podstawowej konfiguracji bazy danych.
Załóżmy, że masz następującą konfigurację:
<?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' => [ ... ],
];
Możesz wykonać krok dostępny w https://github.com/orchestral/ tenanti#konfiguracja połączenia z wieloma bazami danych i dodaj następujący 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;
});
}
}
Zapewniłoby to, że korzystasz z tenant_1
baza danych dla użytkownika=1, tenant_2
baza danych dla user=2 i tak dalej.
W tym miejscu musisz dodać logikę do oprogramowania pośredniczącego.
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');