首页 >数据库 >mysql教程 >如何在原则 2 中实现带有额外字段的多对多关系?

如何在原则 2 中实现带有额外字段的多对多关系?

DDD
DDD原创
2024-11-30 07:57:12369浏览

How to Implement a Many-to-Many Relationship with an Extra Field in Doctrine 2?

原则 2 中带有额外字段的多对多链接表

简介
数据库建模通常涉及创建多对多关系。在需要为每个关系存储附加信息的情况下,传统的多对多表就变得不够了。本文探讨了如何使用 Doctrine 2 创建此类关系,其中在链接表中添加了一个额外的字段。

挑战
最初,尝试创建多对多关系附加字段导致链接表没有所需值。随后尝试重组数据库布局以包含与“产品”和“商店”实体关系的单独“库存”表也被证明是不成功的。

解决方案
解决问题的关键这个问题在于理解与附加值的多对多关联成为一个独特的实体。在此示例的上下文中,“Stock”表及其“amount”字段表示一个单独的实体,该实体不再是纯粹的多对多关系。

实体模型
基于这个理解,下面的实体模型是提议:

  • 产品:

    • 保存产品信息,包括名称和库存库存。
  • 商店:

    • 与产品类似,但存储商店信息和库存
  • Stock:

    • 代表Product和Store之间的关系,包括“金额”

使用 Doctrine 2 进行映射
相应的 Doctrine 2 实体映射如下所示:

// Product.php
class Product
{
    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */
    protected $stockProducts;
}

// Store.php
class Store
{
    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") */
    protected $stockProducts;
}

// Stock.php
class Stock
{
    /** @ORM\Column(type="integer") */
    protected $amount;

    /** @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") */
    protected $store;

    /** @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") */
    protected $product;
}

通过遵循这种方法,您可以使用 Doctrine 2 创建与附加字段的复杂数据库关系,从而提供更大的数据灵活性建模。

以上是如何在原则 2 中实现带有额外字段的多对多关系?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn