2017-01-08 17 views
1

私は同じタイプの2つのドクトリンエンティティを持っています。私は保持したいIDを除き、あるエンティティの内容をもう一方の内容に置き換えたいと思います。別のエンティティからのDoctrine更新エンティティ

すべてのプロパティを1つずつ設定する必要はありません。一般的なやり方が欲しいです。

今日、私はあるオブジェクトをシリアライズして、それを別のオブジェクトにデシリアライズしていますが、これはうまく動作しますが、これを行うより良い方法があるのだろうかと思います。 $オブジェクト1から$ object2はの内容をコピーするために例えば

、$ object2はの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(); 
関連する問題