在$ entity变量中,有一个与$ other_address类型相同的对象,但填写了所有字段值。
我想将$ other_address对象中的所有字段设置为与$ entity object完全相同的值。
这是否可以在少于N行的行中进行,其中N是我需要设置的字段数?
我尝试了“克隆”关键字,但它没有用。
这是代码。
$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);
答案 0 :(得分:38)
我不确定为什么克隆不起作用。
这似乎对我有用,至少在基本的测试用例中是这样的:
$A = $em->find('Some\Entity',1);
$B = clone $A;
$B->setId(null);
如果你有担心的关系,你可能想要safely implement __clone,这样就可以做你想要它与相关实体做的事情。
答案 1 :(得分:24)
只需克隆实体,您甚至不需要取消设置ID。 Doctrine已经为你解决了这个问题
答案 2 :(得分:1)
$A = $em->find('Some\Entity',1);
$B = clone $A;
$em->persist($B);
$em->flush();
如果你merge
它将更新实体,最好使用persist()
它将复制整行并添加自动递增的主键