Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Selamlar şuan halı hazırda çalışan crud işlemlerin olduğu login olabildiğin bir sistem mevcut tek veritabanı uzerınden yürüyo işlemler ama şöyle bi geliştirme yapmak istiyorum sisteme birden fazla şirket kayıt olabilir ve o şirketlerın kendı dataları tutuluyor guvenlık amacıyla kullanıcı login olduktan sonra onu farklı bir veritabanına yönlendırmek istiyorum ve kendı veritabanına kayıtları eklıcek aynı tablolar o verıtabanındada olcak ve route yönlendırmelerı farklı şekilde görülcek bunu nasıl yapabilirim fikir verirseniz şimdiden teşekkür ederim

  • mgsmus bunu yanıtladı.
  • Bu şekilde olabilir diye düşünüyorum ama kesin bir deneme yapmadığım için bir şey diyemiyorum.

    Schema::table('users', function (Blueprint $table) {
        $table->string('database_name')->nullable();
    });
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Support\Facades\Config;
    use Illuminate\Support\Facades\DB;
    
    class DynamicDatabaseConnection
    {
        public function handle($request, Closure $next)
        {
            if (auth()->check()) {
                $databaseName = auth()->user()->database_name;
    
                if ($databaseName) {
                    Config::set('database.connections.dynamic_mysql', [
                        'driver'    => 'mysql',
                        'host'      => env('DB_HOST', '127.0.0.1'),
                        'database'  => $databaseName,
                        'username'  => env('DB_USERNAME', 'forge'),
                        'password'  => env('DB_PASSWORD', ''),
                        'charset'   => 'utf8mb4',
                        'collation' => 'utf8mb4_unicode_ci',
                        'prefix'    => '',
                        'strict'    => true,
                        'engine'    => null,
                    ]);
    
                    DB::setDefaultConnection('dynamic_mysql');
                }
            }
    
            return $next($request);
        }
    }

    Bu şekilde olabilir diye düşünüyorum ama kesin bir deneme yapmadığım için bir şey diyemiyorum.

    Schema::table('users', function (Blueprint $table) {
        $table->string('database_name')->nullable();
    });
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Support\Facades\Config;
    use Illuminate\Support\Facades\DB;
    
    class DynamicDatabaseConnection
    {
        public function handle($request, Closure $next)
        {
            if (auth()->check()) {
                $databaseName = auth()->user()->database_name;
    
                if ($databaseName) {
                    Config::set('database.connections.dynamic_mysql', [
                        'driver'    => 'mysql',
                        'host'      => env('DB_HOST', '127.0.0.1'),
                        'database'  => $databaseName,
                        'username'  => env('DB_USERNAME', 'forge'),
                        'password'  => env('DB_PASSWORD', ''),
                        'charset'   => 'utf8mb4',
                        'collation' => 'utf8mb4_unicode_ci',
                        'prefix'    => '',
                        'strict'    => true,
                        'engine'    => null,
                    ]);
    
                    DB::setDefaultConnection('dynamic_mysql');
                }
            }
    
            return $next($request);
        }
    }

      mgsmus teşekkürler hocam öncelikle bunu inceledim istek bu şekilde maliyet kısmıyla ben ilgilenmıyorum aslında müşteri bazlı veritabanından çok uygulamayı alan her şirket tabanında yenı veritabanı oluşmalı sadece yapıyı kafamda oluşturamadım route ve veritabanı mantıgını statik bişey yapmadan dinamik şekilde ilerletmek istiyorum

      koti42 öncelikle teşekkürler mantık olarka bu kısmı anladım burda kayıt eklerken vs yine veritabanı adlarını ana veritabanında tutarak eklemeleride yapabilirim gibi düşündüm ve route yönlendırmesınıde aynı sekılde dınamık yapmak istiyorum

        • koti42

            Seviye 246
          • Düzenlendi

          fatkocc
          Böyle denenebilir belki

          use Illuminate\Support\Facades\Route;
          
          class RouteServiceProvider extends ServiceProvider
          {
              public function map()
              {
                  $this->mapWebRoutes();
              }
          
              protected function mapWebRoutes()
              {
                  Route::middleware('web')
                       ->namespace($this->namespace)
                       ->group(base_path('routes/web.php'));
                  
                  if (auth()->check() && auth()->user()->database_name) {
                      Route::middleware('web')
                           ->namespace($this->namespace)
                           ->group(base_path('routes/' . auth()->user()->database_name . '.php'));
                  }
              }
          }