Dans la variable $ entity, il existe un objet du même type que $ other_address, mais avec toutes les valeurs de champs renseignées.
Je souhaite définir tous les champs de l'objet $ other_address pour qu'ils aient exactement les mêmes valeurs que l'objet $ entity.
Est-ce faisable en moins de N lignes, N étant le nombre de champs à définir?
J'ai essayé le mot clé "clone", mais cela n'a pas fonctionné.
Voici le code.
$other_address = $em->getRepository('PennyHomeBundle:Address')
->findBy(array('user' => $this->get('security.context')->getToken()->getUser()->getId(), 'type' => $check_type));
$other_address = $other_address[0];
//I want to set all values in this object to have values from another object of same type
$other_address->setName($entity->getName());
$other_address->setAddress1($entity->getAddress1());
$other_address->setAddress2($entity->getAddress2());
$other_address->setSuburbTown($entity->getSuburbTown());
$other_address->setCityState($entity->getCityState());
$other_address->setPostZipCode($entity->getPostZipCode());
$other_address->setPhone($entity->getPhone());
$other_address->setType($check_type);
Je ne sais pas pourquoi le clonage ne fonctionne pas.
Cela semble fonctionner pour moi, au moins dans un cas de test de base:
$A = $em->find('Some\Entity',1);
$B = clone $A;
$B->setId(null);
Si vous devez vous inquiéter au sujet de vos relations, vous voudrez peut-être implémenter __clone en toute sécurité afin qu’il fasse ce que vous voulez avec des entités apparentées.
Il suffit de cloner l'entité, vous n'avez même pas besoin de désidentifier l'identifiant. La doctrine a abordé cela pour vous
$A = $em->find('Some\Entity',1);
$B = clone $A;
$em->persist($B);
$em->flush();
si vous merge
il mettra à jour l'entité, mieux vous utilisez persist()
il dupliquera la ligne entière et ajoutera une clé primaire auto incrémentée