Product
可能有零个或多个Label
。 Label
可以分配为零或更多Product
。那么,Doctrine中映射A 和映射B 之间的区别是什么?
/**
* @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;
}
/**
* @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;
}
答案 0 :(得分:0)
您尝试将一对多关系与MANY-TO-MANY关系匹配的第一个示例。这在尝试访问产品标签时会导致问题。它将尝试在标签表的列中查找关系。虽然多对多关系应该有一个额外的表来耦合这两个实体。
理论上这是纯粹的。我没有用真正的代码尝试它,但我想如果你使用第一个例子,Doctrine会抛出异常。事实上,我不应该使用第一个例子。
如果你不喜欢不同类型的关系,请阅读一些关于RDBMS的文章: http://en.wikipedia.org/wiki/Relational_model