/** * Update relations between Identity entity and Address entity * * @param IdentityInterface $model */ protected function updateIdentityAddressRelations($model) { // Detect doublons $addresses = array(); $form_identity_addresses = $model->getAddresses(); foreach ($form_identity_addresses as $identity_address) { if (!isset($addresses[$identity_address->getAddress()->getId()])) { $addresses[$identity_address->getAddress()->getId()] = 1; } else { $model->removeAddress($identity_address); } } // Detect relations removed $relations = $this->container->get('asf_contact.identity_address.manager')->getRepository()->findBy(array('identity' => $model->getId())); foreach ($relations as $relation) { $found = false; foreach ($model->getAddresses() as $identity_address) { if ($relation->getAddress()->getId() == $identity_address->getAddress()->getId()) { $found = true; } } if (false === $found) { $this->container->get('asf_contact.identity.manager')->getEntityManager()->remove($relation); } } // Detect new relations foreach ($model->getAddresses() as $identity_address) { $found = false; foreach ($relations as $relation) { if ($relation->getAddress()->getId() == $identity_address->getAddress()->getId()) { $found = true; } } if (false === $found) { $identity_address->setIdentity($model); $this->container->get('asf_contact.identity.manager')->getEntityManager()->persist($identity_address); } } }