1. ホーム
  2. php

[解決済み] Doctrine 2 でエンティティを別の行として再保存する方法

2023-06-22 21:40:16

質問

例えば、エンティティ $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 の新しい行として保存されました。

私はまだ、ID プロパティを null にするために __clone() メソッドを使用して ID プロパティを無効にします。

更新 2

Doctrine のコードを調べてみると、生成されたプロキシクラスが __clone() を実装しており、この重要な行は

unset($this->_entityPersister, $this->_identifier);