1

0..nの子を持つ親を考えてみましょう。親から子を削除し、親オブジェクトを永続化する場合、子を削除する必要があります。現在、私がその作業を行う唯一の方法は、次のように、実際に子も削除することです。

$parent->removeChild($child);
$em->remove($child);

親を完全に削除すると子もデータベースから削除されるため、関係は正しく設定されていると思います。子を削除するには、次の行では不十分なのはなぜですか?:

$parent->removeChild($child);

背景情報が少ない:親オブジェクトをx個の子オブジェクトで更新しようとしています。以前に関連付けられていた子を削除し、新しい子を追加する必要があります。しかし、どちらを削除および/または追加するかを見つけるために、両方のコレクションを繰り返す必要があると感じています。

誰かがこれの明確な例を持っていますか?そして、Symfony/Doctrineのドキュメントを忘れてください。全部読んだよ!

4

2 に答える 2

2

子供には自分の人生があります、そしてあなたは彼らが彼らの両親から離れているという理由だけで彼らを追い払うべきではありません。別の言い方をすれば、これらは別個のエンティティであり、リレーションを壊しても両方のオブジェクトを維持したいという多くのユースケースがあるため、リレーションを削除するときにオブジェクトが自動的に削除されることはありません。

あなたの本能は正しかった、あなたは両方のリストを繰り返す必要がある。すべてのドキュメントを読んだとおっしゃっていましたが、フォームのコレクションを埋め込む方法の最後をもう一度見てください。これには、まさにそれを実行する親オブジェクトの機能する編集機能が含まれています。

于 2012-12-27T15:32:26.013 に答える
1

親なしでは存在してはならない子エンティティがあり、親が子を個人的に所有している場合は、orphanRemovalを使用できます。

/** 
 * @OneToOne(targetEntity="StandingData", orphanRemoval=true) 
 */
private $standingData;

$contact->standingData(new StandingData("Firstname", "Lastname", "Street"));

連絡先に古い「standingData」があった場合、DBから削除されます。詳細については、 http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/working-with-associations.html#orphan-removalを参照してください。

于 2015-10-07T12:30:42.730 に答える