这两个 Doctrine 映射的真正区别是啥?
Posted
技术标签:
【中文标题】这两个 Doctrine 映射的真正区别是啥?【英文标题】:What's really the difference in these two Doctrine mappings?这两个 Doctrine 映射的真正区别是什么? 【发布时间】:2012-05-11 13:42:46 【问题描述】:Product
可能有零个或多个 Label
。 Label
可以分配给零个或多个 Product
。那么,Doctrine中映射A和映射B有什么区别呢?
映射 A (OneToMany - ManyToOne)
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
/**
* @ORM\OneToMany(targetEntity="Label", mappedBy="products")
*/
protected $labels;
/**
* @ORM\Entity
* @ORM\Table(name="label")
*/
class Label
/**
* @ORM\ManyToMany(targetEntity="Product", inversedBy="labels")
*/
protected $products;
映射 B (ManyToMany - ManyToMany) documentation example
/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
/**
* @ORM\ManyToMany(targetEntity="Label", mappedBy="products")
*/
protected $labels;
/**
* @ORM\Entity
* @ORM\Table(name="label")
*/
class Label
/**
* @ORM\ManyToMany(targetEntity="Product", inversedBy="labels")
*/
protected $products;
【问题讨论】:
【参考方案1】:您的第一个示例尝试将 ONE-TO-MANY 关系与 MANY-TO-MANY 关系匹配。这将在尝试访问产品标签时引起问题。它将尝试在标签表的列中查找关系。而多对多关系应该有一个额外的表来耦合两个实体。
这纯粹是理论上的。我没有用真实的代码尝试过,但我想如果你使用第一个例子,Doctrine 会抛出异常。我实际上不应该使用第一个示例。
如果您不熟悉不同类型的关系,请阅读一些有关 RDBMS 的文章: http://en.wikipedia.org/wiki/Relational_model
【讨论】:
以上是关于这两个 Doctrine 映射的真正区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Symfony2 中使用 Doctrine 映射异常错误
DOMContentLoaded 与 window.onload。这两者之间的真正区别是啥? [复制]
Doctrine 2.1 @Column 注释中“选项”的语法是啥?