A flexible, seamless and easy to use multitenancy solution for Laravel

dev-main 2023-08-21 09:47 UTC

This package is auto-updated.

Last update: 2024-04-21 16:41:33 UTC


README

tenanted-laravel.png

Packagist Version Packagist PHP Version Support GitHub Psalm Level Laravel

Main:

codecov CircleCI Mutation testing badge

Develop:

codecov CircleCI Mutation testing badge

Tenanted Laravel

A flexible, seamless and easy to use multitenancy solution for Laravel

This package is currently under development. Check back in the future, or check out my twitter, mastodon or discord for updates.

A quick FAQ

Here's a little FAQ that hopefully answers any questions you have for now.

Why are you building yet another multitenancy package for Laravel?

I feel like the currently available solutions leave something to be desired, as they're either very opinionated, or unnecessarily inflexible.

What sets this package apart?

It provides improvements on what is currently available, such as:

  • It is more flexible.
  • It is far more seamless.
  • It provides a greater degree of separation between your application logic and business logic.
  • It provides supporting functionality, either within this package or as an optional addon.
  • It doesn't tie you into one particular way of doing things.
  • It doesn't limit what you can do with Laravel.
  • It doesn't use magic to dynamically alter things, like the current default connection, because that really obfuscates what's happening.

Does it provide single and multi-database support?

Yes, either one on their own or as a combination.

Can I use dependency injection with my controller constructors?

Of course. Laravels container can successfully resolve controller dependencies that require a tenant, and inject them into the constructor, straight out of the box.

Wasn't this package originally premium?

It was, but I realised that I care far more about people having options than I do about getting paid.

Does this supersede the course?

No. This package is the code that I used to write the course, except it has been slightly modified so that it can function as a package.

While this package provides a solid base for your application, there are going to be times when it's better to write a custom solution.