首页  >  文章  >  后端开发  >  如何使用 Dotrine 2 建模具有附加数据的多对多关系?

如何使用 Dotrine 2 建模具有附加数据的多对多关系?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-25 07:25:29201浏览

How to Model Many-to-Many Relationships with Additional Data Using Doctrine 2?

原则 2 和具有附加字段的多对多链接表

在数据库建模中,表示与附加数据点的多对多关系可能具有挑战性。 Doctrine 2 是一种流行的 PHP ORM,它通过结合称为“链接表”的技术提供了解决方案。这些表充当实体之间的中介,在捕获附加信息的同时促进关联。

考虑以下场景:您想要创建一个在商店和产品之间具有多对多关系的数据库模型。但是,商店和产品之间的每个链接还应该包含一个附加值,例如可用库存数量。

数据库模型

最初,您可能考虑使用多对多- 直接在链接表中使用额外字段的许多关系。然而,原则 2 认识到这样的关联并不是真正的多对多关系,而是一个具有自己标识符的新实体。

解决方案:单独的 Stock 实体

解决此问题,建议为股票信息创建一个单独的实体,如下面的数据库模型所示:

[具有单独股票实体的数据库模型的图像]

实体

产品:

<code class="php">namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="product") @ORM\Entity() */
class Product
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="product_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */
    protected $stockProducts;
}</code>

商店:

<code class="php">namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="store") @ORM\Entity() */
class Store
{
    /** @ORM\Id() @ORM\Column(type="integer") */
    protected $id;

    /** ORM\Column(name="store_name", type="string", length=50, nullable=false) */
    protected $name;

    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") */
    protected $stockProducts;
}</code>

库存:

<code class="php">namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Table(name="stock") @ORM\Entity() */
class Stock
{
    /** ORM\Column(type="integer") */
    protected $amount;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="store_id", referencedColumnName="id", nullable=false) 
     */
    protected $store;

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=false) 
     */
    protected $product;
}</code>

通过实施这种方法,您现在可以通过 Stock 实体轻松访问股票金额值,并维护 Doctrine 2 中数据模型的完整性。

以上是如何使用 Dotrine 2 建模具有附加数据的多对多关系?的详细内容。更多信息请关注PHP中文网其他相关文章!

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