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