我不太明白Doctrine中的关联。我想知道单向关系和双向关系之间的区别,以及Doctrine 2中的拥有方和反向方是什么。
我不太明白Doctrine中的关联。我想知道单向关系和双向关系之间的区别,以及Doctrine 2中的拥有方和反向方是什么。
双向和单向是关于您的PHP对象中的引用的。
正如这里所示,单向和双向引用的数据库模式实际上是相同的。区别在于:
拥有方和反向方的概念是关于将对象模型更改持久化到数据库中。这里是详细的解释。
简而言之,Doctrine 2不会跟踪对象模型中的更改。假设您有两个类:Parent
和Child
。类Parent
具有集合children
。类Child
具有引用parent
。以下代码将使您的数据模型不一致:
$parent = new Parent();
$child = new Child();
$parent->children->add($child);
$child
添加到$parent
中,但不设置$child->parent
。领域模型变得不一致(这就是为什么Doctrine手册建议将关联逻辑封装到实体模型中),但仍然可以将这些对象持久化到数据库中。owning side
状态持久化实体关系。因此,在我们的例子中,$parent
=>$child
关系将是:
Parent
类,则持久化Child
类,则忽略