学说中的关系2

时间:2011-07-19 08:51:29

标签: doctrine-orm

我很遗憾没有得到学说的联想。我想知道单向和双向关系有什么区别。什么是学说2中的拥有方和反方

1 个答案:

答案 0 :(得分:15)

双向和单向关系

双向和单向是关于PHP对象中的引用。

正如您所看到的here,单向和双向引用的数据库模式实际上是相同的。区别在于:

  • 单向:A类对象引用B类对象,反之则不然。
  • 双向:A类对象引用B类对象,B类对象引用A类对象

反向和拥有方

拥有和反向的概念是关于将对象模型更改持久化到数据库。 Here是详细解释。

简而言之,Doctrine 2不跟踪对象模型的变化。让我们说你有两个clasees: ParentChild。类Parent具有集合children。 “孩子”类有参考parent。以下代码将使您的数据模型不一致:

$parent = new Parent();
$child = new Child();
$parent->children->add($child);

在实体类中拥有公共属性是一个坏主意,而且非常气馁,但出于演示原因,它没关系。因此,以下代码将$child添加到$parent,但未设置$child->parent。域模型变得不一致(这就是Doctrine手册推荐incapsulate association logic into entity models)的原因,但仍然可以将这些对象持久保存到数据库中。

这就是拥有和反面的概念变得重要的地方。学说将根据拥有方的状态保持实体关系。因此,在我们的示例中,$parent => $child关系将为:

  • 坚持,如果拥有方是Parent
  • 忽略,如果拥有方为Child class

请注意,拥有方标有 inversedBy relatioship批注。

挑选拥有和反面有recommendation