sql >> Database teknologi >  >> RDS >> Mysql

Hvordan bruger man orchestral/tenanti i Laravel 5 til at bygge en multi lejer applikation med flere databaser?

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

Så hvordan registrerer Tenanti, hvilken bruger, hvis aktiv?

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


  1. 4 Fantastiske SQL Server-overvågningsressourcer til databaseadministratorer

  2. Hvad er forskellene mellem et klynget og et ikke-klynget indeks?

  3. Tips til overvågning af PostgreSQL til Moodle

  4. Hvordan konverteres billede til byte array kun ved hjælp af javascript for at gemme billede på sql server?