Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да използвате orchestral/tenanti в Laravel 5, за да изградите приложение с множество наематели с множество бази данни?

+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 и т.н.

И така, как Tenanti открива кой потребител е активен?

Това е мястото, където трябва да добавите логика във вашия междинен софтуер.

$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. mysqldump таблица без изхвърляне на първичния ключ

  2. Командата CREATE е отказана на потребителя?

  3. MySQL низ до DATE/TIME или TIMESTAMP

  4. Съхранение на csv в полето MySQL – лоша идея?

  5. MySQL заявка за намиране на приятели и брой общи приятели