我有两个相同类型的学说实体,我希望用另一个实体的内容替换一个实体的内容,除了我想保留的ID。
我不想逐个设置所有属性,我想要一种通用的方法来实现它。
今天我正在序列化一个对象并将其反序列化到另一个对象中,它有点工作,但我想知道是否有更好的方法来做到这一点?
例如,要将$ object1的内容复制到$ object2,同时保留$ object2的id(两者都已经由doctrine管理),我这样做:
$json = $serializer->serialize($object1, 'json');
$serializer->deserialize($json, Entity::class,
'json', array('object_to_populate' => $object2));
这对于引用的属性来说效果不是很好,任何人都知道如何以更好的方式实现这一目标?
感谢。
答案 0 :(得分:0)
我会像这样在对象中实现setter getter:
/**
* In $object1
* @return array
*/
public function asArray(){
$properties = [];
foreach ($this as $name => $value){
$properties[$name] = $value;
}
return $properties;
}
/**
* in object2
* @param $array
*/
public function fromArray($array){
foreach ($array as $name => $value){
if(!isset($this->$name) || $name == 'id'){
continue;
}
$this->$name = $value;
}
}
然后你可以这样做:
$object2->fromArray($object1->asArray());
$entityManager->flush();