web-dev-qa-db-ja.com

Doctrine 2:IDを除いて、あるオブジェクトから別のオブジェクトにすべての値を複製する方法は?

$ entity変数には、$ other_addressと同じタイプのオブジェクトがありますが、すべてのフィールド値が入力されています。

$ other_addressオブジェクトのすべてのフィールドを$ entityオブジェクトとまったく同じ値に設定したいと思います。

これは、N未満の行数で実行可能ですか?ここで、Nは設定する必要があるフィールドの数です?

「クローン」キーワードを試しましたが、うまくいきませんでした。

これがコードです。

                $other_address = $em->getRepository('PennyHomeBundle:Address')
          ->findBy(array('user' => $this->get('security.context')->getToken()->getUser()->getId(), 'type' => $check_type));
                $other_address = $other_address[0];


                //I want to set all values in this object to have values from another object of same type
                $other_address->setName($entity->getName());
                $other_address->setAddress1($entity->getAddress1());
                $other_address->setAddress2($entity->getAddress2());
                $other_address->setSuburbTown($entity->getSuburbTown());
                $other_address->setCityState($entity->getCityState());
                $other_address->setPostZipCode($entity->getPostZipCode());
                $other_address->setPhone($entity->getPhone());
                $other_address->setType($check_type);
25
Tool

クローンが機能しない理由がわかりません。

これは、少なくとも基本的なテストケースでは私にとってはうまくいくようです:

$A = $em->find('Some\Entity',1);

$B = clone $A;
$B->setId(null);

関係を心配する必要がある場合は、 安全に__cloneを実装する を使用して、関連するエンティティに対して実行したいことを実行できます。

38
timdev

エンティティを複製するだけで、IDの設定を解除する必要はありません。 Doctrineがこれに取り組みました

24
David Lin
_$A = $em->find('Some\Entity',1);

$B = clone $A;
$em->persist($B);
$em->flush();
_

mergeエンティティを更新する場合、persist()を使用するのが最適です。行全体が複製され、自動インクリメントされた主キーが追加されます

1
Waqar Haider