PHPackages                             enlinealab/landlord - 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. enlinealab/landlord

ActiveLibrary[Framework](/categories/framework)

enlinealab/landlord
===================

A simple, single database multi-tenancy solution for Laravel 5.7

v2.0.8(8y ago)022MITPHPPHP &gt;=5.6.0

Since Jan 18Pushed 7y ago1 watchersCompare

[ Source](https://github.com/LuisNeighbur/Landlord)[ Packagist](https://packagist.org/packages/enlinealab/landlord)[ RSS](/packages/enlinealab-landlord/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependencies (4)Versions (16)Used By (0)

Landlord for Laravel &amp; Lumen 5.2+
=====================================

[](#landlord-for-laravel--lumen-52)

[![Landlord for Laravel & Lumen 5.2+](readme-header.jpg)](readme-header.jpg)

[![StyleCI Status](https://camo.githubusercontent.com/e82dc1bedd36c98db29f8bf01fcd525df922dfa69f88793e69ce05ea45adf6eb/68747470733a2f2f7374796c6563692e696f2f7265706f732f34393835313431372f736869656c643f6272616e63683d76322e302d776970)](https://camo.githubusercontent.com/e82dc1bedd36c98db29f8bf01fcd525df922dfa69f88793e69ce05ea45adf6eb/68747470733a2f2f7374796c6563692e696f2f7265706f732f34393835313431372f736869656c643f6272616e63683d76322e302d776970)
[![Build Status](https://camo.githubusercontent.com/3101ca0a099b75733b4adedc67940fc0d77a1c4a666ead361aaa5dae00685690/68747470733a2f2f7472617669732d63692e6f72672f486970737465724a617a7a626f2f4c616e646c6f72642e7376673f6272616e63683d76322e302d776970)](https://camo.githubusercontent.com/3101ca0a099b75733b4adedc67940fc0d77a1c4a666ead361aaa5dae00685690/68747470733a2f2f7472617669732d63692e6f72672f486970737465724a617a7a626f2f4c616e646c6f72642e7376673f6272616e63683d76322e302d776970)

A single database multi-tenancy package for Laravel &amp; Lumen 5.2+.

> **Upgrading from Landlord v1?** Make sure to read the [change log](CHANGELOG.md) to see what needs updating.

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

[](#installation)

To get started, require this package:

```
composer require hipsterjazzbo/landlord
```

### Laravel

[](#laravel)

Add the ServiceProvider in `config/app.php`:

```
    'providers' => [
        ...
        HipsterJazzbo\Landlord\LandlordServiceProvider::class,
    ],
```

Register the Facade if you’d like:

```
    'aliases' => [
        ...
        'Landlord'   => HipsterJazzbo\Landlord\Facades\Landlord::class,
    ],
```

You could also publish the config file:

```
php artisan vendor:publish --provider="HipsterJazzbo\Landlord\LandlordServiceProvider"
```

and set your `default_tenant_columns` setting, if you have an app-wide default. LandLord will use this setting to scope models that don’t have a `$tenantColumns` property set.

### Lumen

[](#lumen)

You'll need to set the service provider in your `bootstrap/app.php`:

```
$app->register(HipsterJazzbo\Landlord\LandlordServiceProvider::class);
```

And make sure you've un-commented `$app->withEloquent()`.

Usage
-----

[](#usage)

This package assumes that you have at least one column on all of your Tenant scoped tables that references which tenant each row belongs to.

For example, you might have a `companies` table, and a bunch of other tables that have a `company_id` column.

### Adding and Removing Tenants

[](#adding-and-removing-tenants)

> **IMPORTANT NOTE:** Landlord is stateless. This means that when you call `addTenant()`, it will only scope the *current request*.
>
> Make sure that you are adding your tenants in such a way that it happens on every request, and before you need Models scoped, like in a middleware or as part of a stateless authentication method like OAuth.

You can tell Landlord to automatically scope by a given Tenant by calling `addTenant()`, either from the `Landlord` facade, or by injecting an instance of `TenantManager()`.

You can pass in either a tenant column and id:

```
Landlord::addTenant('tenant_id', 1);
```

Or an instance of a Tenant model:

```
$tenant = Tenant::find(1);

Landlord::addTenant($tenant);
```

If you pass a Model instance, Landlord will use Eloquent’s `getForeignKey()` method to decide the tenant column name.

You can add as many tenants as you need to, however Landlord will only allow **one** of each type of tenant at a time.

To remove a tenant and stop scoping by it, simply call `removeTenant()`:

```
Landlord::removeTenant('tenant_id');

// Or you can again pass a Model instance:
$tenant = Tenant::find(1);

Landlord::removeTenant($tenant);
```

You can also check whether Landlord currently is scoping by a given tenant:

```
// As you would expect by now, $tenant can be either a string column name or a Model instance
Landlord::hasTenant($tenant);
```

And if for some reason you need to, you can retrieve Landlord's tenants:

```
// $tenants is a Laravel Collection object, in the format 'tenant_id' => 1
$tenants = Landlord::getTenants();
```

### Setting up your Models

[](#setting-up-your-models)

To set up a model to be scoped automatically, simply use the `BelongsToTenants` trait:

```
use Illuminate\Database\Eloquent\Model;
use HipsterJazzbo\Landlord\BelongsToTenants;

class ExampleModel extends Model
{
    use BelongsToTenants;
}
```

If you’d like to override the tenants that apply to a particular model, you can set the `$tenantColumns` property:

```
use Illuminate\Database\Eloquent\Model;
use HipsterJazzbo\Landlord\BelongsToTenants;

class ExampleModel extends Model
{
    use BelongsToTenants;

    public $tenantColumns = ['tenant_id'];
}
```

### Creating new Tenant scoped Models

[](#creating-new-tenant-scoped-models)

When you create a new instance of a Model which uses `BelongsToTenants`, Landlord will automatically add any applicable Tenant ids, if they are not already set:

```
// 'tenant_id' will automatically be set by Landlord
$model = ExampleModel::create(['name' => 'whatever']);
```

### Querying Tenant scoped Models

[](#querying-tenant-scoped-models)

After you've added tenants, all queries against a Model which uses `BelongsToTenant` will be scoped automatically:

```
// This will only include Models belonging to the current tenant(s)
ExampleModel::all();

// This will fail with a ModelNotFoundForTenantException if it belongs to the wrong tenant
ExampleModel::find(2);
```

> **Note:** When you are developing a multi tenanted application, it can be confusing sometimes why you keep getting `ModelNotFound` exceptions for rows that DO exist, because they belong to the wrong tenant.
>
> Landlord will catch those exceptions, and re-throw them as `ModelNotFoundForTenantException`, to help you out :)

If you need to query across all tenants, you can use `allTenants()`:

```
// Will include results from ALL tenants, just for this query
ExampleModel::allTenants()->get()
```

Under the hood, Landlord uses Laravel's [anonymous global scopes](https://laravel.com/docs/5.3/eloquent#global-scopes). This means that if you are scoping by multiple tenants simultaneously, and you want to exclude one of the for a single query, you can do so:

```
// Will not scope by 'tenant_id', but will continue to scope by any other tenants that have been set
ExampleModel::withoutGlobalScope('tenant_id')->get();
```

Contributing
------------

[](#contributing)

If you find an issue, or have a better way to do something, feel free to open an issue or a pull request.

###  Health Score

29

—

LowBetter than 60% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

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.

###  Release Activity

Cadence

Every ~50 days

Recently: every ~73 days

Total

13

Last Release

3158d ago

Major Versions

v1.0.2 → v2.0-beta2016-09-27

PHP version history (2 changes)v1.0PHP &gt;=5.4.0

v2.0-betaPHP &gt;=5.6.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/eb94678dca145530d63bea1dee24a1f51df766d11a827a5564b3307e822c172d?d=identicon)[LuisNeighbur](/maintainers/LuisNeighbur)

---

Top Contributors

[![jbrooksuk](https://avatars.githubusercontent.com/u/246103?v=4)](https://github.com/jbrooksuk "jbrooksuk (12 commits)")[![LuisNeighbur](https://avatars.githubusercontent.com/u/803558?v=4)](https://github.com/LuisNeighbur "LuisNeighbur (4 commits)")[![geomagilles](https://avatars.githubusercontent.com/u/134669?v=4)](https://github.com/geomagilles "geomagilles (4 commits)")[![phaberest](https://avatars.githubusercontent.com/u/3464092?v=4)](https://github.com/phaberest "phaberest (2 commits)")[![vernesto84](https://avatars.githubusercontent.com/u/662250?v=4)](https://github.com/vernesto84 "vernesto84 (2 commits)")[![renanwilliam](https://avatars.githubusercontent.com/u/19995615?v=4)](https://github.com/renanwilliam "renanwilliam (1 commits)")[![rikvdlooi](https://avatars.githubusercontent.com/u/15796734?v=4)](https://github.com/rikvdlooi "rikvdlooi (1 commits)")[![tonydew](https://avatars.githubusercontent.com/u/525153?v=4)](https://github.com/tonydew "tonydew (1 commits)")[![luizreginaldo](https://avatars.githubusercontent.com/u/1282758?v=4)](https://github.com/luizreginaldo "luizreginaldo (1 commits)")[![christian-thomas](https://avatars.githubusercontent.com/u/740172?v=4)](https://github.com/christian-thomas "christian-thomas (1 commits)")[![GrahamCampbell](https://avatars.githubusercontent.com/u/2829600?v=4)](https://github.com/GrahamCampbell "GrahamCampbell (1 commits)")[![bissolli](https://avatars.githubusercontent.com/u/1808444?v=4)](https://github.com/bissolli "bissolli (1 commits)")[![Omranic](https://avatars.githubusercontent.com/u/406705?v=4)](https://github.com/Omranic "Omranic (1 commits)")

---

Tags

tenantmultitenancytenancymultitenant

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/enlinealab-landlord/health.svg)

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

###  Alternatives

[stancl/tenancy

Automatic multi-tenancy for your Laravel application.

4.3k6.6M40](/packages/stancl-tenancy)[hipsterjazzbo/landlord

A simple, single database multi-tenancy solution for Laravel 5.2+

613270.0k1](/packages/hipsterjazzbo-landlord)[nunomazer/laravel-samehouse

A multi-tenant Laravel package, based on single database, simple and ease to use

24239.0k](/packages/nunomazer-laravel-samehouse)[stefanbauer/landlord-extended

A simple, single database multi-tenancy solution for Laravel 5.2+

101.2k](/packages/stefanbauer-landlord-extended)[maize-tech/laravel-tenant-aware

Laravel Tenant Aware

141.1k](/packages/maize-tech-laravel-tenant-aware)

PHPackages © 2026

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