首頁  >  文章  >  後端開發  >  如何使用 Dotrine 2 建模具有附加資料的多對多關係?

如何使用 Dotrine 2 建模具有附加資料的多對多關係?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-25 07:25:29267瀏覽

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