+1 към @morphatic отговор, той е тихо точен за повечето неща.
Миграция
За вашата основна база данни трябва да можете да използвате database/migration
по подразбиране и използвайте php artisan make:migration
и php artisan migrate
.
Tenanti обаче ще използва пътя за миграция, зададен в конфигурацията на "драйвер". напр.:
'path' => database_path('tenanti/user'),
В този случай миграцията ще бъде създадена/мигрирана от database/tenanti/user
(можете да изберете друга папка и тя ще използва тази папка). След като настроите това, можете да създадете нов файл за миграция за потребителя наемател чрез php artisan tenanti:make user create_blogs_table
(като пример) и стартирайте миграцията чрез php artisan tenanti:migrate user
(вижте приликата между командата за миграция на Laravel и Tenanti?).
Драйвер
Драйверът е просто групирането на наемател, може би го групирате по потребители, компании или екип и т.н. И има възможност да се нуждаете от повече от един тип група на проект, в противен случай през повечето време използвате само един " група" или "шофьор".
Удостоверяване или достъп до DB
На първо място, трябва да помислите как планирате да разграничите всеки наемател. През повечето време виждам как хората са склонни да избират поддомейн. Така че в този случай трябва да проверите дали поддомейнът принадлежи на някой от потребителите (чрез заявка към основната база данни) с помощта на междинен софтуер и след това да се свържете с базата данни, която принадлежи на потребителя.
Tenanti не управлява тази част от процеса, тъй като всеки има различен стил по отношение на този аспект, но ние предоставяме код за динамично свързване с наемателя на вашата база данни от базова конфигурация на базата данни.
Да кажем, че имате следната конфигурация:
<?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' => [ ... ],
];
Можете да следвате стъпката, налична в https://github.com/orchestral/ tenanti#multi-database-connection-setup и добавете следния код.
<?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;
});
}
}
Това ще гарантира, че използвате tenant_1
база данни за потребител=1, tenant_2
база данни за потребител=2 и т.н.
Това е мястото, където трябва да добавите логика във вашия междинен софтуер.
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');