【问题标题】:What's really the difference in these two Doctrine mappings?这两个 Doctrine 映射的真正区别是什么?
【发布时间】:2012-05-11 13:42:46
【问题描述】:

Product 可能有零个或多个 LabelLabel 可以分配给零个或多个 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;
}

【问题讨论】:

    标签: database-design orm doctrine doctrine-orm associations


    【解决方案1】:

    您的第一个示例尝试将 ONE-TO-MANY 关系与 MANY-TO-MANY 关系匹配。这将在尝试访问产品标签时引起问题。它将尝试在标签表的列中查找关系。而多对多关系应该有一个额外的表来耦合两个实体。

    这纯粹是理论上的。我没有用真实的代码尝试过,但我想如果你使用第一个例子,Doctrine 会抛出异常。我实际上不应该使用第一个示例。

    如果您不熟悉不同类型的关系,请阅读一些有关 RDBMS 的文章: http://en.wikipedia.org/wiki/Relational_model

    【讨论】:

      猜你喜欢
      • 2015-01-13
      • 2017-08-27
      • 2014-06-22
      • 2011-10-29
      • 1970-01-01
      • 2014-08-23
      • 2012-06-12
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多