我有两个相同类型的教义实体,我希望用另一个实体的内容替换一个实体的内容,除了我想保留的 ID。
我不想一一设置所有属性,我想要一种通用的方法。
今天我正在序列化一个对象并将其反序列化为另一个对象,它有点工作,但我想知道是否有更好的方法来做到这一点?
例如,要将 $object 1 的内容复制到 $object 2,同时保持 id 为 $object 2(两者都已经由教义管理),我这样做:
$json = $serializer->serialize($object1, 'json');
$serializer->deserialize($json, Entity::class,
'json', array('object_to_populate' => $object2));
这对于引用的属性效果不佳,有人知道如何以更好的方式实现这一目标吗?
谢谢。
我会像这样在对象中实现 setters 和 getters:
/**
* 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();