Yapmak istediğiniz işlem için aramalarda kullanabileceğiniz anahtar teriminiz "Multi Schema - Multi Tenant"dır.
İstediğiniz işlemi yapmak için her requestte öncelikli olarak çalıştıracağınız bir Middleware hazırlayın. Hazırladığınız middleware içerisinde, giriş yapmış kullanıcının database bilgisini alıp aşağıdaki kod ile dinamik olarak ayarlayabilirsiniz. Burada en önemli nokta; veritabanında henüz işlem yapmadan, öncelikli olarak bu middleware'i çalıştırmanızdır.
$database = Auth::user()->company_database;
$host = "Dilediğiniz host, user üzerinden alabilirsiniz yada sabit kullanabilirsiniz";
config(['database.connections.mysql.host' => $host]);
config(['database.connections.mysql.database' => $database]);
Aşağıdaki konuyuda inceleyebilirsiniz;
https://laravel.gen.tr/d/2535
Company bilgisinin header'da gönderildiği, api based bir uygulamamızdan basit bir örnek;
<?php
namespace Herkod\Common\Middleware;
use Closure;
use Auth;
use Herkod\Auth\Models\SubscriptionUser;
class SetTenantDatabaseMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$company = $request->header('Company');
//Company gönderilmezse işlem yapılamaz.
if(!$company) {
abort(400, 'Company required!');
}
//Token'dan gelen kullanıcının subscriptionlarını çekiyoruz.
$subscription = SubscriptionUser::where('user_id', '=', Auth::user()->id)->first()->subscriptions($company)->first();
//Gelen token'ın ilgili company için yetkisi var mı kontrol ediyoruz.
if(!$subscription) {
abort(401, 'Unauthorized company!');
}
//Connection helper ile connection dinamik olarak set edilir.
connection($subscription->host, $subscription->database);
return $next($request);
}
}