From b08961150c78008e485dac5c89bf4726b258fbad Mon Sep 17 00:00:00 2001 From: Abrar Ahmad Date: Thu, 10 Nov 2022 14:36:58 +0500 Subject: [PATCH] separate pivot model for each approach --- src/Database/Concerns/ResourceSyncing.php | 3 ++- src/Database/Models/TenantMorphPivot.php | 22 ++++++++++++++++++++++ src/Database/Models/TenantPivot.php | 4 ++-- tests/ResourceSyncingTest.php | 12 +++++------- 4 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 src/Database/Models/TenantMorphPivot.php diff --git a/src/Database/Concerns/ResourceSyncing.php b/src/Database/Concerns/ResourceSyncing.php index 0276febc..7ed830fd 100644 --- a/src/Database/Concerns/ResourceSyncing.php +++ b/src/Database/Concerns/ResourceSyncing.php @@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Relations\MorphToMany; use Stancl\Tenancy\Contracts\Syncable; use Stancl\Tenancy\Contracts\UniqueIdentifierGenerator; use Stancl\Tenancy\Database\Models\Tenant; +use Stancl\Tenancy\Database\Models\TenantMorphPivot; use Stancl\Tenancy\Database\Models\TenantPivot; use Stancl\Tenancy\Events\SyncedResourceSaved; @@ -50,7 +51,7 @@ trait ResourceSyncing public function tenants(): MorphToMany { return $this->morphToMany($this->getResourceTenantModelName(), 'tenant_resources', 'tenant_resources', 'resource_global_id', 'tenant_id', 'global_id') - ->using(TenantPivot::class); + ->using(TenantMorphPivot::class); } public function getResourceTenantModelName(): string // todo better name diff --git a/src/Database/Models/TenantMorphPivot.php b/src/Database/Models/TenantMorphPivot.php new file mode 100644 index 00000000..55756596 --- /dev/null +++ b/src/Database/Models/TenantMorphPivot.php @@ -0,0 +1,22 @@ +pivotParent; + + if ($parent instanceof Syncable && $parent->shouldSync()) { + $parent->triggerSyncEvent(); + } + }); + } +} diff --git a/src/Database/Models/TenantPivot.php b/src/Database/Models/TenantPivot.php index c36c7e40..3cc614a9 100644 --- a/src/Database/Models/TenantPivot.php +++ b/src/Database/Models/TenantPivot.php @@ -4,10 +4,10 @@ declare(strict_types=1); namespace Stancl\Tenancy\Database\Models; -use Illuminate\Database\Eloquent\Relations\MorphPivot; +use Illuminate\Database\Eloquent\Relations\Pivot; use Stancl\Tenancy\Contracts\Syncable; -class TenantPivot extends MorphPivot +class TenantPivot extends Pivot { public static function booted(): void { diff --git a/tests/ResourceSyncingTest.php b/tests/ResourceSyncingTest.php index f6e2650b..f2fd61f0 100644 --- a/tests/ResourceSyncingTest.php +++ b/tests/ResourceSyncingTest.php @@ -4,7 +4,6 @@ declare(strict_types=1); use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; -use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Events\CallQueuedListener; use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Queue; @@ -824,10 +823,9 @@ function migrateUsersTableForTenants(): void class ResourceTenant extends Tenant { - public function users(): MorphToMany + public function users(): BelongsToMany { - return $this->morphedByMany(CentralUserForPolymorphic::class, 'tenant_resources', 'tenant_resources', 'tenant_id', 'resource_global_id', 'id', 'global_id') - ->using(TenantPivot::class); + return $this->belongsToMany(CentralUser::class, 'tenant_users', 'tenant_id', 'global_user_id', 'id', 'global_id'); } } @@ -841,10 +839,10 @@ class CentralUser extends Model implements SyncMaster public $table = 'users'; - // override method to provide different tenant - public function getResourceTenantModelName(): string + public function tenants(): BelongsToMany { - return ResourceTenant::class; + return $this->belongsToMany(ResourceTenant::class, 'tenant_users', 'global_user_id', 'tenant_id', 'global_id') + ->using(TenantPivot::class); } public function getTenantModelName(): string