+1 an @morphatic answer, es ist ziemlich genau bei den meisten Sachen.
Migration
Für Ihre Hauptdatenbank sollten Sie in der Lage sein, die Standardeinstellung database/migration
zu verwenden und verwenden Sie php artisan make:migration
und php artisan migrate
.
Tenanti verwendet jedoch den Migrationspfad, der unter der „Treiber“-Konfiguration festgelegt ist. B.:
'path' => database_path('tenanti/user'),
In diesem Fall wird die Migration von database/tenanti/user
erstellt/migriert (Sie können einen anderen Ordner auswählen und dieser Ordner wird verwendet). Sobald Sie dies eingerichtet haben, können Sie über php artisan tenanti:make user create_blogs_table
eine neue Migrationsdatei für den Benutzermandanten erstellen (als Beispiel) und führen Sie die Migration über php artisan tenanti:migrate user
aus (Sehen Sie die Ähnlichkeit zwischen dem Laravel-Migrationsbefehl und Tenanti?).
Fahrer
Treiber ist nur die Gruppierung eines Mandanten, Sie können ihn vielleicht nach Benutzern, Unternehmen oder Teams usw. gruppieren. Und es besteht die Möglichkeit, dass Sie mehr als eine Art von Gruppe pro Projekt benötigen, da Sie sonst meistens nur einzelne verwenden. Gruppe" oder "Fahrer".
Authentifizierung oder Zugriff auf DB
Zunächst einmal müssen Sie überlegen, wie Sie die einzelnen Mandanten unterscheiden möchten. Die meiste Zeit würde ich sehen, dass sich die Leute für Subdomains entscheiden. In diesem Fall müssen Sie also mithilfe einer Middleware prüfen, ob die Subdomain einem der Benutzer gehört (durch Abfragen der Hauptdatenbank), und sich dann mit der Datenbank verbinden, die dem Benutzer gehört.
Tenanti verwaltet diesen Teil des Prozesses nicht, da jeder in diesem Aspekt einen anderen Stil hat, aber wir stellen einen Code bereit, um von einer Basisdatenbankkonfiguration aus dynamisch eine Verbindung zu Ihrem Datenbankmandanten herzustellen.
Nehmen wir an, Sie haben die folgende 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' => [ ... ],
];
Sie können dem unter https://github.com/orchestral/ verfügbaren Schritt folgen. tenanti#multi-database-connection-setup und fügen Sie den folgenden Code hinzu.
<?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;
});
}
}
Dadurch würde sichergestellt, dass Sie tenant_1
verwenden Datenbank für Benutzer=1, tenant_2
Datenbank für Benutzer=2 und so weiter.
Hier müssen Sie Ihrer Middleware Logik hinzufügen.
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');