public function updateEstudianteRelations(Estudiante $estudiante, $updateBrothers = false) { foreach ($estudiante->getProgenitores() as $progenitor) { $newsletterUser = $progenitor->getNewsletterUser(); $toRemoveGroups = array(); $newsletterGroups = $newsletterUser->getUserGroups(); foreach ($newsletterGroups as $group) { $toRemoveGroups[$group->getId()] = $group; } $toAddGroups = $this->getNewsletterGroupsOfStudent($estudiante); $addKeys = array_keys($toAddGroups); foreach ($addKeys as $key) { if (isset($toRemoveGroups[$key])) { unset($toRemoveGroups[$key]); unset($toAddGroups[$key]); } } foreach ($toRemoveGroups as $group) { $newsletterUser->removeUserGroup($group); } foreach ($toAddGroups as $group) { $newsletterUser->addUserGroup($group); } $this->em->persist($newsletterUser); $this->em->flush($newsletterUser); } if ($updateBrothers) { foreach ($estudiante->getMyBrothers() as $brother) { $this->updateEstudianteRelations($brother, false); } } }