2

双方向の関係を持つ 2 つのクラス (人、家) があるとします (人には家のリストがあり、家には所有者がいます)。

Personクラスに次のものがあったとします。

$houses = new ArrayCollection();

public function removeHouse(id){
    $this->houses->remove(id);
}

家を所有し、次のことを行ったPerson (名前: John ) がいるとします。

$john = $em->find('User', $johnsId);
$johnsHouse = $john->getHouse(0); // this would give you John's first house

echo $house->getOwner()->getName(); // this would echo "John"

$user->removeHouse(0); // this would remove the house from John's list

echo $house->getOwner()->getName(); 

これは、エンティティ マネージャが何かをフラッシュする前です。だから私の最初の質問: 最後のエコーは何を生成しますか? null または "John"

その後、フラッシュが発生します...

$em->flush();

echo $house->getOwner()->getName(); 

2 番目の質問: エコーは今何を生成しますか? nullまたはジョン?

Doctrineのドキュメントから私が理解していることから、これはnullを生成するはずですよね?

私の目標は、フラッシュが発生する前に、こちら側で発生した変更を双方向関係の反対側に反映させることです。別の言い方をすれば、最初の質問のエコーが null を生成するようにします。

これがフラッシュの前にエンティティ マネージャーによって自動的に行われない場合 (最初の質問への回答は「John」です)、removeHouse 関数を変更して手動で反対側の更新を実行することで修正する必要がありますか?

public function removeHouse(id){
    $house = $this->houses->remove(id);
    $house->setOwner(null)
}

また、エンティティ マネージャーがフラッシュ時に変更を加えようとしたときに、これが複雑になる可能性はありますか?

4

1 に答える 1