Tenancy multi-database integration for FilamentPHP
Warning
We have a known problem with route:cache if you find a problem with multi-database connection from your tenant side you may face this problem just use php artisan route:clear and it will be fixed.
- Multi Database
- Create Tenant Resource
- Sync Tenant Resource
- Password Change
- Tenant Impersonate
- Share Tenant Data
- Custom Theme For Tenant
- Livewire Component For Register New Tenant
composer require tomatophp/filament-tenancyafter install your package please run this command
php artisan filament-tenancy:installin your .env add this
CENTRAL_DOMAIN=tomatophp.testwhere tomatophp.test is your central domain, and make sure you add a root user or a user have a permission to create database, then in your main central panel add this plugin
use TomatoPHP\FilamentTenancy\FilamentTenancyPlugin;
->plugin(FilamentTenancyPlugin::make()->panel('app'))now you need to create a panel for tenancy app
php artisan filament:paneland make the name same as ->panel('app'), in your tenancy app panel add this plugin
use TomatoPHP\FilamentTenancy\FilamentTenancyAppPlugin;
->plugin(FilamentTenancyAppPlugin::make())now on your config\database.php add this code
...
'connections' => [
'dynamic' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
...
], now run config:cache
php artisan config:cacheon your bootstrap\app.php add this middleware
use Stancl\Tenancy\Middleware\InitializeTenancyByDomain;
use Stancl\Tenancy\Middleware\InitializeTenancyBySubdomain;
->withMiddleware(function (Middleware $middleware) {
$middleware->group('universal', [
InitializeTenancyByDomain::class,
InitializeTenancyBySubdomain::class,
]);
})you can allow impersonate to tanent panel with 1 click by use this method on your plugin
use TomatoPHP\FilamentTenancy\FilamentTenancyPlugin;
->plugin(
FilamentTenancyPlugin::make()
->panel('app')
->allowImpersonate()
)you can publish config file by use this command
php artisan vendor:publish --tag="filament-tenancy-config"you can publish views file by use this command
php artisan vendor:publish --tag="filament-tenancy-views"you can publish languages file by use this command
php artisan vendor:publish --tag="filament-tenancy-lang"you can publish migrations file by use this command
php artisan vendor:publish --tag="filament-tenancy-migrations"Checkout our Awesome TomatoPHP




