From 9612c89e6250adf03ef3b58d83e4040a69087c21 Mon Sep 17 00:00:00 2001 From: Eduard Lupacescu Date: Tue, 11 Jul 2023 16:06:58 +0300 Subject: [PATCH 1/3] feat: allow nullable tenant --- .github/workflows/run-tests.yml | 4 ++-- config/tenantable.php | 7 +++++++ src/Models/TenantScope.php | 6 +++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index e573a9c..69c756c 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -2,9 +2,9 @@ name: run-tests on: push: - branches: [master] + branches: [main] pull_request: - branches: [master] + branches: [main] jobs: test: diff --git a/config/tenantable.php b/config/tenantable.php index 02b1bf7..813e0b9 100644 --- a/config/tenantable.php +++ b/config/tenantable.php @@ -8,6 +8,13 @@ 'related_tenant_column' => env('TENANTABLE_RELATED_TENANT_COLUMN', 'tenant_id'), + /** + * Allow the `tenant_id` to be null. + * + * If the entry does have null tenant_id, it will be considered as a global entry. + */ + 'allow_nullable_tenant' => env('ALLOW_NULLABLE_TENANT', true), + /** * The base model for tenant. */ diff --git a/src/Models/TenantScope.php b/src/Models/TenantScope.php index ba5451b..c0b0f99 100644 --- a/src/Models/TenantScope.php +++ b/src/Models/TenantScope.php @@ -10,7 +10,11 @@ class TenantScope implements Scope { public function apply(Builder $builder, Model $model) { - $builder->where($model->qualifyColumn(config('tenantable.related_tenant_column')), tenant()->key()); + $builder + ->when(config('tenantable.allow_nullable_tenant'), fn(Builder $builder) => $builder->whereNull($model->qualifyColumn(config('tenantable.related_tenant_column')))) + ->orWhere( + $model->qualifyColumn(config('tenantable.related_tenant_column')), tenant()->key() + ); } public function extend(Builder $builder) From 8b4db58c769f95b75517f2c96f1263c89e9a4eca Mon Sep 17 00:00:00 2001 From: binaryk Date: Tue, 11 Jul 2023 13:07:28 +0000 Subject: [PATCH 2/3] Fix styling --- src/Models/TenantScope.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Models/TenantScope.php b/src/Models/TenantScope.php index c0b0f99..a420726 100644 --- a/src/Models/TenantScope.php +++ b/src/Models/TenantScope.php @@ -11,9 +11,10 @@ class TenantScope implements Scope public function apply(Builder $builder, Model $model) { $builder - ->when(config('tenantable.allow_nullable_tenant'), fn(Builder $builder) => $builder->whereNull($model->qualifyColumn(config('tenantable.related_tenant_column')))) + ->when(config('tenantable.allow_nullable_tenant'), fn (Builder $builder) => $builder->whereNull($model->qualifyColumn(config('tenantable.related_tenant_column')))) ->orWhere( - $model->qualifyColumn(config('tenantable.related_tenant_column')), tenant()->key() + $model->qualifyColumn(config('tenantable.related_tenant_column')), + tenant()->key() ); } From 35c41f2123ac6da99b2f15eda6b286ad61f1c3e7 Mon Sep 17 00:00:00 2001 From: Eduard Lupacescu Date: Tue, 11 Jul 2023 16:12:08 +0300 Subject: [PATCH 3/3] fix: wip --- src/Models/TenantScope.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Models/TenantScope.php b/src/Models/TenantScope.php index c0b0f99..47eec83 100644 --- a/src/Models/TenantScope.php +++ b/src/Models/TenantScope.php @@ -10,11 +10,17 @@ class TenantScope implements Scope { public function apply(Builder $builder, Model $model) { - $builder - ->when(config('tenantable.allow_nullable_tenant'), fn(Builder $builder) => $builder->whereNull($model->qualifyColumn(config('tenantable.related_tenant_column')))) - ->orWhere( - $model->qualifyColumn(config('tenantable.related_tenant_column')), tenant()->key() - ); + $column = $model->qualifyColumn(config('tenantable.related_tenant_column')); + $tenantKey = tenant()->key(); + + if (config('tenantable.allow_nullable_tenant')) { + $builder->where(function (Builder $query) use ($column, $tenantKey) { + $query->whereNull($column) + ->orWhere($column, $tenantKey); + }); + } else { + $builder->where($column, $tenantKey); + } } public function extend(Builder $builder)