+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
. के माध्यम से माइग्रेशन चलाएँ (लारावेल माइग्रेशन कमांड और टेनंती के बीच समानता देखें?)
ड्राइवर
ड्राइवर सिर्फ एक किरायेदार का समूह है, आप शायद इसे उपयोगकर्ताओं, कंपनियों या टीम आदि द्वारा समूहित कर सकते हैं। और संभावना है कि आपको प्रति प्रोजेक्ट एक से अधिक प्रकार के समूह की आवश्यकता हो सकती है, अन्यथा अधिकांश समय आप केवल एकल का उपयोग कर रहे हैं " समूह" या "चालक"।
प्रमाणीकरण या डीबी तक पहुंच
सबसे पहले, आपको यह विचार करने की आवश्यकता है कि आप प्रत्येक किरायेदार को अलग करने की योजना कैसे बना रहे हैं। अधिकांश समय मैंने देखा होगा कि लोग सबडोमेन का विकल्प चुनते हैं। तो इस मामले में आपको मिडलवेयर का उपयोग करके यह जांचना होगा कि क्या उपडोमेन किसी उपयोगकर्ता (मुख्य डेटाबेस को क्वेरी करके) से संबंधित है और फिर उस डेटाबेस से कनेक्ट करें जो उपयोगकर्ता से संबंधित है।
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/ में उपलब्ध चरण का अनुसरण कर सकते हैं टेनेंटी#मल्टी-डेटाबेस-कनेक्शन-सेटअप और निम्न कोड जोड़ें।
<?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 वगैरह।
यहीं पर आपको अपने मिडलवेयर में लॉजिक जोड़ने की जरूरत है।
$user = App\User::whereSubdomain($request->route()->parameter('tenant'))->first();
Tenanti::driver('user')->asDefaultDatabase($user, 'tenants_{id}');