我完全没有理解教义中的关联。我想知道单向和双向关系有什么区别。学说2中的正方和反方是什么
双向和单向关系
双向和单向与 PHP 对象中的引用有关。
如你看到的here http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html#many-to-many-unidirectional,单向和双向引用的数据库模式实际上是相同的。区别在于:
- 单向:A类对象引用B类对象,但反之则不然。
- 双向:A类对象引用B类对象,B类对象引用A类对象
逆方和己方
拥有和反面的概念是将对象模型更改持久保存到数据库。Here http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html#owning-side-and-inverse-side是详细的解释。
简而言之,原则 2 不跟踪对象模型的变化。假设您有两个班级:Parent
and Child
. Class Parent
有收藏children
。 'Child' 类有参考parent
。以下代码将使您的数据模型不一致:
$parent = new Parent();
$child = new Child();
$parent->children->add($child);
在实体类中拥有公共属性是一个坏主意,并且强烈建议不要这样做,但出于演示原因,这是可以的。所以,添加以下代码$child
to $parent
,但不设置$child->parent
。领域模型变得不一致(这就是为什么 Doctrine 手册建议将关联逻辑封装到实体模型中 http://www.doctrine-project.org/docs/orm/2.0/en/reference/working-with-associations.html#association-management-methods),但仍然可以将该对象持久保存到数据库中。
这就是拥有和反面的概念变得重要的地方。 Doctrine将根据状态来持久化实体关系拥有方。所以,在我们的例子中,$parent
=>$child
关系将是:
- 坚持,如果拥有一方
Parent
class
- 忽略,如果拥有一方
Child
class
请注意,拥有方标记为反转关系注释。
有一个推荐 http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html#picking-owning-and-inverse-side关于选择拥有方和反方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)