澄清查詢
在最初的問題,使用者尋求有關在包含附加欄位(庫存)的連結表中建立多對多關係的指導數量)。使用 Doctrine 存取庫存量值並產生資料庫表結構時出現了挑戰。
解決問題
問題源自於多對多的假設-許多具有附加價值的關係都可以這樣對待。但是,具有附加價值的多對多關係將成為具有識別碼和值的新實體。
解決方案
解決方案涉及建立一個名為 Stock的單獨實體包含以下列:
這允許系統準確地建模多對多關係,從而使用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中文網其他相關文章!