原则:实体管理器是否在刷新更改之前更新内存关系



假设我有两个类(Person, House),它们具有双向关系(一个人有一个房子列表,而一个房子有一个主人)。

假设在Person类中有以下内容:
$houses = new ArrayCollection();
public function removeHouse(id){
    $this->houses->remove(id);
}

假设您有一个Person (name: 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(); 

这是在实体管理器刷新任何内容之前。所以我的第一个问题:最后一个echo会产生什么?null或"John"

然后刷新发生…

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

第二个问题:现在回显会产生什么?null还是John?

根据我对Doctrine文档的理解,现在应该产生null,对吗?

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

如果这不是在冲洗之前由实体管理器自动完成的(第一个问题的答案是"John"),我必须通过修改removeHouse函数手动在另一边执行更新来修复它吗?

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

当实体管理器试图在刷新时进行更改时,会有任何并发症吗?

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

看:http://docs.doctrine-project.org/en/2.0.x/reference/working-with-associations.html

最新更新