2

假设我有 2 个具有双向关系的类(Person,House) (一个人有一个房屋列表,一个房子有一个所有者)。

假设我在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(); 

这是在实体管理器刷新任何内容之前。所以我的第一个问题:最后一个回声会产生什么?空或“约翰”

然后出现冲洗...

$em->flush();

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

第二个问题:现在回声会产生什么?空还是约翰?

根据我从 Doctrine 的文档中了解到的情况,这现在应该产生 null,对吗?

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

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

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

当实体管理器尝试在刷新时进行更改时,这可能会产生任何复杂性吗?

4

1 回答 1

1

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

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

于 2013-05-28T12:13:22.667 回答