Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menggunakan orkestra/tenanti di Laravel 5 untuk membangun aplikasi multi tenant dengan banyak database?

+1 untuk jawaban @morphatic, itu cukup akurat di sebagian besar hal.

Migrasi

Untuk database utama Anda, Anda harus dapat menggunakan database/migration default dan gunakan php artisan make:migration dan php artisan migrate .

Namun Tenanti akan menggunakan jalur migrasi yang ditetapkan di bawah konfigurasi "driver". misalnya:

'path' => database_path('tenanti/user'),

Dalam hal ini migrasi akan dibuat/dimigrasikan dari database/tenanti/user (Anda dapat memilih folder lain dan itu akan menggunakan folder itu). Setelah Anda mengatur ini, Anda dapat membuat file migrasi baru untuk penyewa pengguna melalui php artisan tenanti:make user create_blogs_table (sebagai contoh) dan jalankan migrasi melalui php artisan tenanti:migrate user (lihat kesamaan antara perintah migrasi Laravel dan Tenanti?).

Pengemudi

Pengemudi hanyalah pengelompokan penyewa, Anda mungkin mengelompokkannya berdasarkan pengguna, perusahaan, atau tim dll. Dan ada kemungkinan Anda mungkin memerlukan lebih dari satu jenis grup per proyek, jika tidak sebagian besar waktu Anda hanya menggunakan satu " grup" atau "pengemudi".

Otentikasi atau Mengakses DB

Pertama-tama, Anda perlu mempertimbangkan bagaimana Anda berencana untuk membedakan setiap penyewa. Sebagian besar waktu saya akan melihat orang cenderung memilih subdomain. Jadi dalam hal ini Anda perlu memeriksa apakah subdomain milik salah satu pengguna (dengan menanyakan database utama) menggunakan middleware dan kemudian menghubungkan ke database milik pengguna.

Tenanti tidak mengelola bagian proses tersebut, karena setiap orang memiliki gaya yang berbeda pada aspek tersebut, tetapi kami menyediakan kode untuk terhubung secara dinamis ke penyewa database Anda dari konfigurasi database dasar.

Katakanlah Anda memiliki konfigurasi berikut:

<?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' => [ ... ],
];

Anda dapat mengikuti langkah yang tersedia di https://github.com/orchestral/ tenanti#multi-database-connection-setup dan tambahkan kode berikut.

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

Ini akan memastikan bahwa Anda menggunakan tenant_1 database untuk pengguna=1, tenant_2 database untuk user=2 dan seterusnya.

Lalu bagaimana Tenanti mendeteksi pengguna mana yang aktif?

Di sinilah Anda perlu menambahkan logika di middleware Anda.

$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. Cara Memantau Database MySQL/MariaDB menggunakan Netdata di CentOS 7

  2. Mengapa saya terus mendapatkan kesalahan 500 dengan PHP saya?

  3. Bagaimana cara menambahkan serangkaian string dalam penambahan id di tabel apa pun?

  4. Bagaimana cara menggunakan CASE..WHEN yang benar di MySQL

  5. Tidak dapat terhubung ke server MySQL di '127.0.0.1' (10061) (2003)