source = $source; } private function itterateOverMemberships(Collection $memberships): void { /** * @var SourceInterface */ foreach ($memberships as $membership) { if (!$this->memberships->contains($membership)) { $this->memberships->add($membership); $this->itterateOverMemberships($membership->getMemberships()); } } } public function getAllMemberships(): Collection { $this->memberships = new ArrayCollection(); $this->itterateOverMemberships($this->source->getMemberships()); return $this->memberships; } }