📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials Laravel Framework Multi-tenancy

Multi-tenancy

6 min read
Scope all queries and mutations by tenant using global scopes and middleware-set tenant context.

Multi-tenancy

// Tenant-aware middleware
class SetTenant {
    public function handle(Request $request, Closure $next) {
        $domain  = $request->getHost();
        $tenant  = Tenant::where("domain", $domain)->firstOrFail();

        app()->instance("tenant", $tenant);
        config(["database.connections.tenant.database" => $tenant->database]);
        DB::reconnect("tenant");

        return $next($request);
    }
}

// Scoped queries using global scope
class TenantScope implements Scope {
    public function apply(Builder $builder, Model $model): void {
        $builder->where("tenant_id", app("tenant")->id);
    }
}

class Post extends Model {
    protected static function booted(): void {
        static::addGlobalScope(new TenantScope());
        static::creating(fn($m) => $m->tenant_id = app("tenant")->id);
    }
}