来自另一个实体的Doctrine更新实体

时间:2017-01-08 19:32:33

标签: php symfony doctrine-orm doctrine

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

我不想逐个设置所有属性,我想要一种通用的方法来实现它。

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

例如,要将$ object1的内容复制到$ object2,同时保留$ object2的id(两者都已经由doctrine管理),我这样做:

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

这对于引用的属性来说效果不是很好,任何人都知道如何以更好的方式实现这一目标?

感谢。

1 个答案:

答案 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();