Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak używać orkiestrowego/tenanti w Laravel 5 do budowania aplikacji wielodostępnej z wieloma bazami danych?

+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.

Jak więc Tenanti wykrywa, który użytkownik jest aktywny?

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}');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Alternatywa MySQL dla T-SQL'a WITH TIES

  2. Naprawianie błędu PHP PEAR

  3. Jak przekonwertować ten złożony SQL na zapytanie modelu Django?

  4. Czytaj tablicę JSON w MYSQL

  5. Bezpieczne przechowywanie haseł do MYSQL w aplikacji PHP