$integration->integration_code, 'name' => $integration->name.' / '.$this->ownerName($owner), 'integration_data' => $integrationData, ]); return $this->associate($owner, $integration->integration_code, $instance); }); } public function associate(Client|WebsiteType $owner, string $code, IntegrationInstance $instance): ClientIntegration|WebsiteTypeIntegration { abort_unless($instance->integration_code === $code, 422, 'The instance belongs to another integration.'); return $owner->integrations()->updateOrCreate( ['integration_code' => $code], ['integration_instance_id' => $instance->id], )->load('integrationInstance'); } public function detach(Client|WebsiteType $owner, string $code): void { $owner->integrations()->where('integration_code', $code)->delete(); } private function ownerName(Client|WebsiteType $owner): string { return $owner instanceof Client ? $owner->name : $owner->nombre; } }