首頁 > 資料庫 > mysql教程 > 教義2中如何處理額外欄位的多對多關係?

教義2中如何處理額外欄位的多對多關係?

Patricia Arquette
發布: 2024-12-22 01:55:11
原創
836 人瀏覽過

How to Handle Many-to-Many Relationships with Extra Fields in Doctrine 2?

原則2 和額外欄位的多對多連結表:澄清

澄清查詢

在最初的問題,使用者尋求有關在包含附加欄位(庫存)的連結表中建立多對多關係的指導數量)。使用 Doctrine 存取庫存量值並產生資料庫表結構時出現了挑戰。

解決問題

問題源自於多對多的假設-許多具有附加價值的關係都可以這樣對待。但是,具有附加價值的多對多關係將成為具有識別碼和值的新實體。

解決方案

解決方案涉及建立一個名為 Stock的單獨實體包含以下列:

  • 金額(用於存放庫存value)
  • 與產品和商店實體的關係

這允許系統準確地建模多對多關係,從而使用Doctrine 提供對庫存金額值的存取。 🎜>

更新的實體

以下是調整後的實體定義:

產品:

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;
}
登入後複製

Sto回覆:

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;
}
登入後複製

庫存:

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;
}
登入後複製

資料庫結構

資料庫結構

CREATE TABLE product (
  id INT NOT NULL,
  product_name VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE store (
  id INT NOT NULL,
  store_name VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE stock (
  amount INT NOT NULL,
  store_id INT NOT NULL,
  product_id INT NOT NULL,
  PRIMARY KEY (store_id, product_id),
  FOREIGN KEY (store_id) REFERENCES store (id),
  FOREIGN KEY (product_id) REFERENCES product (id)
);
登入後複製
此變更導致結構如下所述顯示:

以上是教義2中如何處理額外欄位的多對多關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板