Doctrine orm 条令:实体管理器是否在刷新更改之前更新内存中的关系?

Doctrine orm 条令:实体管理器是否在刷新更改之前更新内存中的关系?,doctrine-orm,doctrine,Doctrine Orm,Doctrine,假设我有两个类(Person,House),具有双向关系(Person有一个房屋列表,House有一个所有者) 假设我在Person类中有以下内容: $houses = new ArrayCollection(); public function removeHouse(id){ $this->houses->remove(id); } 假设你有一个人(名字是:约翰),他拥有一栋房子,并做了以下事情: $john = $em->find('User', $johns

假设我有两个类(Person,House),具有双向关系(Person有一个房屋列表,House有一个所有者)

假设我在Person类中有以下内容:

$houses = new ArrayCollection();

public function removeHouse(id){
    $this->houses->remove(id);
}
假设你有一个人(名字是:约翰),他拥有一栋房子,并做了以下事情:

$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(); 
这是在实体管理器刷新任何内容之前。所以我的第一个问题是:最后一个回声会产生什么?空或“John”

然后,冲洗发生

$em->flush();

echo $house->getOwner()->getName(); 
第二个问题:回声现在会产生什么?空还是约翰?

根据我在条令文件中的理解,这应该会产生空值,对吗

我的目标是让双向关系的另一边反映在刷新发生之前在这一边发生的变化。换句话说,我希望第一个问题的回音产生null

如果实体经理在刷新之前没有自动完成此操作(第一个问题的答案是“John”),我是否必须通过修改removeHouse功能在另一端手动执行更新来修复此问题?

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

当实体经理试图在刷新时进行更改时,是否会出现任何复杂情况?

我在文档中的正确页面上无意中找到了问题的答案。作为开发人员,您需要自己保持关系同步

见: