PHPackages                             toporia/tenancy - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. toporia/tenancy

ActiveLibrary[Framework](/categories/framework)

toporia/tenancy
===============

Multi-tenancy support for Toporia Framework

00PHP

Since Dec 16Pushed 5mo agoCompare

[ Source](https://github.com/Minhphung7820/toporia-tenancy)[ Packagist](https://packagist.org/packages/toporia/tenancy)[ RSS](/packages/toporia-tenancy/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Toporia Tenancy
===============

[](#toporia-tenancy)

Multi-tenancy support for Toporia Framework.

Installation
------------

[](#installation)

```
composer require toporia/tenancy
```

Auto-Discovery
--------------

[](#auto-discovery)

This package uses Toporia's **Package Auto-Discovery** system. After installation:

- **Service Provider** is automatically registered - no manual registration required
- **Configuration** is automatically discovered from `extra.toporia.config` in composer.json
- **Migrations** are automatically included when running `php console migrate`

To rebuild the package manifest manually:

```
php console package:discover
```

Setup
-----

[](#setup)

### Publish Config (optional)

[](#publish-config-optional)

```
php console vendor:publish --provider="Toporia\Tenancy\TenancyServiceProvider"
# Or with tag
php console vendor:publish --tag=tenancy-config
```

Or manually copy `packages/tenancy/config/tenancy.php` to `config/tenancy.php`.

Usage
-----

[](#usage)

### 1. Create Tenant Model

[](#1-create-tenant-model)

```
use Toporia\Tenancy\Contracts\TenantInterface;

class Tenant extends Model implements TenantInterface
{
    public function getTenantKey(): int|string
    {
        return $this->id;
    }

    public function getTenantIdentifier(): string
    {
        return $this->slug;
    }

    public function isActive(): bool
    {
        return $this->status === 'active';
    }
}
```

### 2. Add BelongsToTenant to Models

[](#2-add-belongstotenant-to-models)

```
use Toporia\Tenancy\Concerns\BelongsToTenant;

class Product extends Model
{
    use BelongsToTenant;
}

// Queries automatically filtered by tenant_id
$products = Product::all(); // WHERE tenant_id = current_tenant_id

// Bypass tenant scope (admin operations)
$allProducts = Product::withoutTenantScope()->get();
```

### 3. Use Middleware

[](#3-use-middleware)

```
// routes/api.php
$router->group(['middleware' => ['tenant']], function ($router) {
    $router->get('/products', [ProductController::class, 'index']);
});
```

### 4. Helper Functions

[](#4-helper-functions)

```
tenant();           // Get current tenant
tenant_id();        // Get current tenant ID
has_tenant();       // Check if tenant context exists
run_as_tenant($tenant, fn() => ...);    // Run in tenant context
run_without_tenant(fn() => ...);        // Run without tenant scope
```

Configuration
-------------

[](#configuration)

```
// config/tenancy.php
return [
    'enabled' => true,
    'model' => App\Domain\Entities\Tenant::class,
    'column' => 'tenant_id',

    'resolvers' => [
        'subdomain' => ['enabled' => false, 'base_domain' => 'example.com'],
        'header' => ['enabled' => true, 'name' => 'X-Tenant-ID'],
        'path' => ['enabled' => false],
    ],
];
```

License
-------

[](#license)

MIT

###  Health Score

17

—

LowBetter than 6% of packages

Maintenance50

Moderate activity, may be stable

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity12

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/1cc240e87c451f2dd614b87bb0d07039e4a20d8b391221c651172cf341e0b6cd?d=identicon)[Minhphung7820](/maintainers/Minhphung7820)

---

Top Contributors

[![Minhphung7820](https://avatars.githubusercontent.com/u/110077842?v=4)](https://github.com/Minhphung7820 "Minhphung7820 (3 commits)")

### Embed Badge

![Health badge](/badges/toporia-tenancy/health.svg)

```
[![Health](https://phpackages.com/badges/toporia-tenancy/health.svg)](https://phpackages.com/packages/toporia-tenancy)
```

###  Alternatives

[laravel/passport

Laravel Passport provides OAuth2 server support to Laravel.

3.4k85.0M532](/packages/laravel-passport)[nolimits4web/swiper

Most modern mobile touch slider and framework with hardware accelerated transitions

41.8k177.2k1](/packages/nolimits4web-swiper)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k36.7M259](/packages/laravel-dusk)[laravel/prompts

Add beautiful and user-friendly forms to your command-line applications.

712181.8M596](/packages/laravel-prompts)[cakephp/chronos

A simple API extension for DateTime.

1.4k47.7M121](/packages/cakephp-chronos)[laravel/pail

Easily delve into your Laravel application's log files directly from the command line.

91545.3M590](/packages/laravel-pail)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
