エンティティ$e
があるとします。別の行として保存する一般的な方法はありますか?別の行には、同じエンティティデータがありますが、別の主キーがありますか?
これが必要な理由:ある種の Temporal Database スキーマを実装しており、行を更新する代わりに別のスキーマを作成するだけです。
クローンを作成して、エンティティに次のメソッドを追加してください
_public function __clone() {
$this->id = null;
}
_
エンティティを永続化する前に detach する必要があるかもしれません。私は今、これをテストするのに便利な開発マシンを持っていません。
_$f = clone $e;
$em->detach($f);
$em->persist($f);
$em->flush();
_
単純なSQLiteデモを使用してみました。何もする必要はないはずです。以下は__clone()
メソッドを追加したり、通常とは違う何かをすることなく私のために働いた
_$new = clone $old;
$em->persist($new);
$em->flush();
_
フラッシュすると、_$new
_エンティティは新しいIDを持ち、DBに新しい行として保存されました。
純粋なモデルビューからは理にかなっているので、__clone()
メソッドを介してIDプロパティをnullのままにします。
Doctrine=コードを掘り下げます。これは、生成されたプロキシクラスがこの重要な行で__clone()
を実装するためです。
_unset($this->_entityPersister, $this->_identifier);
_