If you want to change or add behaviour on the Tenant model you can use your custom model. There are two ways of doing this by extending the Tenant model provided by the package, or by prepping a model of your own.
##Option 1: extending the Tenant model provided by the package
Make sure that your custom model extends the Spatie\Multitenancy\Models\Tenant model provided by the package.
You should specify the class name of your model in the tenant_model key of the multitenancy config file.
'tenant_model' => \App\Models\CustomTenantModel::class,
##Option 2: using a model of your own
You don't have to extend our Tenant model. For example if you use Laravel Jetstream, then you probably want to use Team model provided by that package as your tenant model.
To accomplish that, you can implement the IsTenant interface and use trait ImplementsTenant to fulfill that interface.
Here's an example:
namespace App\Models;
use Laravel\Jetstream\Team as JetstreamTeam;
use Spatie\Multitenancy\Contracts\IsTenant;
use Spatie\Multitenancy\Models\Concerns\ImplementsTenant;
class Team extends JetstreamTeam implements IsTenant
{
use HasFactory;
use UsesLandlordConnection;
use ImplementsTenant;
}
##Performing actions when a tenant gets created
You can leverage Eloquent's lifecycle callbacks to execute extra logic when a tenant gets created, updated, deleted, ...
Here's an example on how you could call some logic that creates a database when a tenant gets created.
namespace App\Models\Tenant;
use Spatie\Multitenancy\Models\Tenant;
class CustomTenantModel extends Tenant
{
protected static function booted()
{
static::creating(fn(CustomTenantModel $model) => $model->createDatabase());
}
public function createDatabase()
{
}
}