diff --git a/assets/config.php b/assets/config.php index 7aff2b65..2827532a 100644 --- a/assets/config.php +++ b/assets/config.php @@ -215,4 +215,12 @@ return [ '--class' => 'DatabaseSeeder', // root seeder class // '--force' => true, ], + + /** + * Single-database tenancy config. + */ + 'single_db' => [ + /** The name of the column used by models with the BelongsToTenant trait. */ + 'tenant_id_column' => 'tenant_id', + ], ]; diff --git a/phpunit.xml b/phpunit.xml index 28fc8a08..9d2b9339 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/src/Database/Concerns/BelongsToTenant.php b/src/Database/Concerns/BelongsToTenant.php index ade966a8..23c66332 100644 --- a/src/Database/Concerns/BelongsToTenant.php +++ b/src/Database/Concerns/BelongsToTenant.php @@ -12,11 +12,9 @@ use Stancl\Tenancy\Database\TenantScope; */ trait BelongsToTenant { - public static $tenantIdColumn = 'tenant_id'; - public function tenant() { - return $this->belongsTo(config('tenancy.tenant_model'), BelongsToTenant::$tenantIdColumn); + return $this->belongsTo(config('tenancy.tenant_model'), config('tenancy.single_db.tenant_id_column')); } public static function bootBelongsToTenant(): void @@ -24,9 +22,9 @@ trait BelongsToTenant static::addGlobalScope(new TenantScope); static::creating(function ($model) { - if (! $model->getAttribute(BelongsToTenant::$tenantIdColumn) && ! $model->relationLoaded('tenant')) { + if (! $model->getAttribute(config('tenancy.single_db.tenant_id_column')) && ! $model->relationLoaded('tenant')) { if (tenancy()->initialized) { - $model->setAttribute(BelongsToTenant::$tenantIdColumn, tenant()->getTenantKey()); + $model->setAttribute(config('tenancy.single_db.tenant_id_column'), tenant()->getTenantKey()); $model->setRelation('tenant', tenant()); } } diff --git a/src/Database/Concerns/HasScopedValidationRules.php b/src/Database/Concerns/HasScopedValidationRules.php index ae5c7fc7..8288f2e3 100644 --- a/src/Database/Concerns/HasScopedValidationRules.php +++ b/src/Database/Concerns/HasScopedValidationRules.php @@ -11,11 +11,11 @@ trait HasScopedValidationRules { public function unique($table, $column = 'NULL') { - return (new Unique($table, $column))->where(BelongsToTenant::$tenantIdColumn, $this->getTenantKey()); + return (new Unique($table, $column))->where(config('tenancy.single_db.tenant_id_column'), $this->getTenantKey()); } public function exists($table, $column = 'NULL') { - return (new Exists($table, $column))->where(BelongsToTenant::$tenantIdColumn, $this->getTenantKey()); + return (new Exists($table, $column))->where(config('tenancy.single_db.tenant_id_column'), $this->getTenantKey()); } } diff --git a/src/Database/Concerns/InvalidatesResolverCache.php b/src/Database/Concerns/InvalidatesResolverCache.php index 82a85997..fee3a076 100644 --- a/src/Database/Concerns/InvalidatesResolverCache.php +++ b/src/Database/Concerns/InvalidatesResolverCache.php @@ -11,7 +11,7 @@ use Stancl\Tenancy\Resolvers\Contracts\CachedTenantResolver; trait InvalidatesResolverCache { /** @var array> */ - public static $resolvers = [ + public static $resolvers = [ // todo@deprecated, move this to a config key? related to a todo in InvalidatesTenantsResolverCache Resolvers\DomainTenantResolver::class, Resolvers\PathTenantResolver::class, Resolvers\RequestDataTenantResolver::class, diff --git a/src/Database/TenantScope.php b/src/Database/TenantScope.php index 8b887ac0..43214959 100644 --- a/src/Database/TenantScope.php +++ b/src/Database/TenantScope.php @@ -17,7 +17,7 @@ class TenantScope implements Scope return; } - $builder->where($model->qualifyColumn(BelongsToTenant::$tenantIdColumn), tenant()->getTenantKey()); + $builder->where($model->qualifyColumn(config('tenancy.single_db.tenant_id_column')), tenant()->getTenantKey()); } public function extend(Builder $builder): void diff --git a/tests/SingleDatabaseTenancyTest.php b/tests/SingleDatabaseTenancyTest.php index 8914a6d7..ec0a0edf 100644 --- a/tests/SingleDatabaseTenancyTest.php +++ b/tests/SingleDatabaseTenancyTest.php @@ -13,8 +13,6 @@ use Stancl\Tenancy\Database\Concerns\HasScopedValidationRules; use Stancl\Tenancy\Tests\Etc\Tenant as TestTenant; beforeEach(function () { - BelongsToTenant::$tenantIdColumn = 'tenant_id'; - Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('text'); @@ -144,7 +142,7 @@ test('tenant id is not auto added when creating primary resources in central con }); test('tenant id column name can be customized', function () { - BelongsToTenant::$tenantIdColumn = 'team_id'; + config(['tenancy.single_db.tenant_id_column' => 'team_id']); Schema::drop('comments'); Schema::drop('posts');