6

Symfony 2 / Doctrine の別のテーブルにエンティティ オブジェクトを複製しようとしています。これを行う方法はありますか?

データベースからオブジェクトを取得した後、次のように複製できます。

$newobject = clone $oldbject;

これにより、データベース内の同じテーブルに新しいレコードとして保持できる新しいオブジェクトが得られます。実際、私はこれをしたくありません。オブジェクトをそのままデータベースの別のテーブルに格納したい。しかし、これを行うには、親エンティティを変更する必要がありますよね? これを達成する方法は?

4

1 に答える 1

9

しかし、実際にはエンティティのクローンを作成しているわけではありません。実際には、別のエンティティが必要です。2つのエンティティはどのように見えますか? 彼らは同じフィールドを持っていますか?次のようなことができます。

$oldEntity = $oldEntity;
$newEntity = new NewEntity();
$oldReflection = new \ReflectionObject($oldEntity);
$newReflection = new \ReflectionObject($newEntity);

foreach ($oldReflection->getProperties() as $property) {
    if ($newReflection->hasProperty($property->getName())) {
        $newProperty = $newReflection->getProperty($property->getName());
        $newProperty->setAccessible(true);
        $newProperty->setValue($newEntity, $property->getValue($oldEntity));
    }
}

これはテストされておらず、エラーが 1 つまたは 2 つある可能性がありますが、これにより、すべてのプロパティを 1 つのオブジェクトから別のオブジェクトにコピーできるはずです (プロパティが両方のオブジェクトで同じ名前であると仮定します)。

于 2013-01-08T13:51:21.217 に答える