私がエンティティを持っているとしましょう$e
。同じエンティティデータであるが別の主キーを持つ別の行として保存する一般的な方法はありますか?
これが必要な理由:ある種の時制データベーススキーマを実装していて、行を更新する代わりに、別のスキーマを作成する必要があります。
私がエンティティを持っているとしましょう$e
。同じエンティティデータであるが別の主キーを持つ別の行として保存する一般的な方法はありますか?
これが必要な理由:ある種の時制データベーススキーマを実装していて、行を更新する代わりに、別のスキーマを作成する必要があります。
クローンを作成して、エンティティに次のメソッドを追加してください
public function __clone() {
$this->id = null;
}
エンティティを永続化する前に、エンティティを切り離す必要がある場合があります。現在、これをテストするための開発マシンが手元にありません。
$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);
私はただします:
/**
* __clone
*
* @return void
*/
public function __clone()
{
$this->id = null;
}
同じクラスの新しいオブジェクトにデータをコピーして永続化することで問題ありません。単純にする!
これが私が使用した単純な戦略であり、過度の複雑さは含まれていません。
$new->fromArray( $old->toArray() );
$new->id = NULL;