Architecture Options
- Single Database — tenant_id column, simplest
- Multi-Database — database per tenant, most isolated
- Hybrid — shared data + tenant-specific tables
Using stancl/tenancy
// Create tenant
$tenant = Tenant::create(['id' => 'acme']);
$tenant->domains()->create(['domain' => 'acme.hcodecraft.com']);
// Automatic scoping
tenancy()->initialize($tenant);
We delivered 5+ SaaS products using this approach.