2015-10-18 20 views
5

Alt etki alanına bağlı olarak, bu belirli kiracıya ait bir veritabanına bağlandığım çok kiracı bir uygulama oluşturuyorum.Birden çok veritabanını Laravel'e bağlamanın en iyi yolu

// To connect with a subdomain - the entry will be in config/database.php. 
    public static function connectSubdomainDatabase($dbname) 
    { 
     $res = DB::select("show databases like '{$dbname}'"); 
     if (count($res) == 0) { 
      App::abort(404); 
     } 
     Config::set('database.connections.subdomain.database', $dbname); 

     //If you want to use query builder without having to specify the connection 
     Config::set('database.default', 'subdomain'); 
     DB::reconnect('subdomain'); 
    } 

bunu bir veritabanı ile bağlanmak için en iyi yolu var mı yoksa bakış performans açısından düşünüyorum çünkü her zaman Bağlandığım çünkü herhangi bir sorun: Burada

bunu koddur Farklı alt alan adları olduğunda veritabanı ile. Bunu yapmanın en iyi yolu nedir?

+0

paylaşılan db çoklu kiracı desen kullanmak olsaydı bazı iş laravel için yapılmıştır: config/DatabaseFunctions.php bağlantıları

// To connect with a subdomain - the entry will be in config/database.php. public static function connectSubdomainDatabase() { // Break apart host $urlParts = explode('.', $_SERVER['HTTP_HOST']); // Change default connection Config::set('database.default', $urlParts[0]); } 

olduğu yerlerde . https://github.com/AuraEQ/laravel-multi-tenant – user993553

+0

@ user993553 Evet, bunu daha önce kontrol ettim ama etiketimde bahsettiğim gibi Laravel-5.1 için bunu istiyorum ve paket 4.2+ –

+0

içeriyor Başka bir tane https: //github.com/orchestral/tenanti 5 – user993553

cevap

1

Bunu yapmanın en iyi yolu neredeyse budur. Sonunda, yine de her şeydir. Ancak, alt etki alanlarının her biri için yapılandırma dosyasında bir bağlantı oluşturur. Ardından, connectSubdomainDatabase() işlevinizde, bir veritabanı adı geçirmek yerine geçerli alt etki alanını alırdım. Daha önce laravel'de bir bağlantı belirtebilirsiniz, veritabanı ismini kullanmanız gereken tek yer config dosyasında.

Yani, böyle bir şey:

'connections' => [ 

     'subdomain1' => [ 
      'driver' => 'mysql', 
      'host'  => env('DB_HOST', 'localhost'), 
      'database' => env('DB_DATABASE', 'forge'), 
      'username' => env('DB_USERNAME', 'forge'), 
      'password' => env('DB_PASSWORD', ''), 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => false, 
     ], 

     'subdomain2' => [ 
       'driver' => 'mysql', 
       'host'  => env('DB_HOST', 'localhost'), 
       'database' => env('DB_DATABASE', 'forge'), 
       'username' => env('DB_USERNAME', 'forge'), 
       'password' => env('DB_PASSWORD', ''), 
       'charset' => 'utf8', 
       'collation' => 'utf8_unicode_ci', 
       'prefix' => '', 
       'strict' => false, 
     ], 

    ], 
+0

Yanıtladığınız için teşekkür ederim Ben de aynı şeyi yaptım. Buraya cevap vermeyi unuttum. Umarım başkalarına yardım eder. –

İlgili konular