Doctrine:在刷新更改之前,实体管理器是否更新了内存关系?

时间:2013-04-18 13:03:20

标签: doctrine-orm doctrine

假设我有两个类别(人物,房子),其中双向关系(一个人有房屋清单,房子有房主)。

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

$houses = new ArrayCollection();

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

假设您拥有一个拥有房屋的(名称为: 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(); 

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

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

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

如果在刷新之前实体管理器没有自动完成(回答第一个问题是“John”),是否必须通过修改removeHouse函数手动执行另一端的更新来修复它吗

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

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

1 个答案:

答案 0 :(得分:1)

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

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