diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php index 82b2311422..80f69b5d84 100644 --- a/lib/Models/Subscriber.php +++ b/lib/Models/Subscriber.php @@ -51,7 +51,8 @@ class Subscriber extends Model { } else { // delete all relations to segments SubscriberSegment::deleteSubscriptions($this); - + // delete all relations to custom fields + SubscriberCustomField::deleteSubscriberRelations($this); return parent::delete(); } } diff --git a/lib/Models/SubscriberCustomField.php b/lib/Models/SubscriberCustomField.php index c036b765f1..35be4855e3 100644 --- a/lib/Models/SubscriberCustomField.php +++ b/lib/Models/SubscriberCustomField.php @@ -86,4 +86,14 @@ class SubscriberCustomField extends Model { Helpers::flattenArray($values) ); } + + static function deleteSubscriberRelations($subscriber) { + if($subscriber === false) return false; + $relations = self::where('subscriber_id', $subscriber->id); + return $relations->deleteMany(); + } + + static function subscribed($orm) { + return $orm->where('status', Subscriber::STATUS_SUBSCRIBED); + } } diff --git a/tests/unit/Models/SubscriberTest.php b/tests/unit/Models/SubscriberTest.php index 84437e8f19..efd3fe5277 100644 --- a/tests/unit/Models/SubscriberTest.php +++ b/tests/unit/Models/SubscriberTest.php @@ -1,6 +1,7 @@ notEquals(false); } + function testItCanDeleteCustomFieldRelations() { + $subscriber = Subscriber::create(); + $subscriber->hydrate(Fixtures::get('subscriber_template')); + $subscriber->save(); + foreach(range(1, 5) as $custom_field) { + $subscriber_custom_field = SubscriberCustomField::create(); + $subscriber_custom_field->custom_field_id = $custom_field; + $subscriber_custom_field->subscriber_id = ($custom_field !== 5) ? + $subscriber->id : + 100; // create one record with a nonexistent subscriber id + $subscriber_custom_field->save(); + } + expect(SubscriberCustomField::findMany())->count(5); + $subscriber->delete(); + expect(SubscriberCustomField::findMany())->count(1); + } + function testItCanGetTheTotalNumberOfSubscribers() { // remove all subscribers Subscriber::deleteMany();