原則2:使用附加欄位管理多對多重連結表
在原則2 中,建模多對多重關係通常涉及創建連結表來表示實體之間的連結。但是,可能會出現需要在連結表本身中儲存附加資訊的情況。這就提出瞭如何使用 Doctrine 存取和管理這些額外欄位值的問題。
多對多重關聯的陷阱
傳統上,多對-許多關係不被視為實體。這是因為它們通常用作連接器,而不具有任何獨特的屬性。但是,當您引入其他欄位(例如「庫存量」)時,連結表將成為具有自己的標識和值的實體。
多商店、多產品庫存管理的原則實體
為了解決您的特定場景,您需要建立三個實體:產品、商店和庫存。 Stock 實體旨在捕獲產品和商店之間的關係,以及每種情況下的庫存量。
定義關係
使用 Doctrine ORM 註解建立實體之間的關係。一對多關聯應使用@OneToMany進行映射,而多對多關聯則需要@ManyToMany註釋。注意@Id和@Column註解分別定義了主鍵和實體欄位。
Link Table中的附加欄位
在Stock實體中,必須定義amount 欄位作為具有對應 @Column 註解的屬性。此附加欄位將儲存在連結表中。
範例實體定義
以下是產品、商店和庫存的範例實體定義,其中包含所需的資訊註釋:
產品:
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\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */ protected $stockProducts; }
儲存e:
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\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\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") @ORM\JoinColumn(name="store_id", referencedColumnName="id", nullable=false) */ protected $store; /** @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=false) */ protected $product; }
地址常見錯誤
如果在執行架構創建命令時遇到錯誤,例如缺少欄位或不正確的表格佈局,請確保您的實體已正確註釋。此外,請檢查您是否已在資料庫模式中定義了所有必要的列和關係。
遵循這些準則,您可以使用 Doctrine 2 成功管理具有附加欄位的多對多連結表。這種方法允許您在關係本身中儲存附加信息,為資料庫模型提供更大的靈活性。
以上是如何管理教義 2 中帶有額外欄位的多對多關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!