2017-01-08 146 views
1

我有两个相同类型的学说实体,我希望用另一个实体的内容替换另一个实体的内容,除了我想保留的ID以外。来自另一个实体的学说更新实体

我不想一个一个地设置所有的属性,我想要一个通用的方式来做到这一点。

今天我正在序列化一个对象并将它反序列化为另一个对象,这种方法有效,但我想知道是否有更好的方法来做到这一点?

例如复制的$ object1至$对象2的内容,同时保持$对象2的ID(两者都已经被教条管理)我做的:

$json = $serializer->serialize($object1, 'json'); 
$serializer->deserialize($json, Entity::class, 
       'json', array('object_to_populate' => $object2)); 

这不是工作这么好参考属性,任何人都有如何以更好的方式实现这个想法?

感谢。

回答

0

我会实现制定者在这样的对象的干将:

/** 
* 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();