Dalam pemodelan pangkalan data, mewakili perhubungan banyak-ke-banyak dengan titik data tambahan boleh menjadi mencabar. Doktrin 2, ORM PHP yang popular, menawarkan penyelesaian dengan menggabungkan teknik yang dikenali sebagai "jadual pautan." Jadual ini berfungsi sebagai perantara antara entiti, memudahkan persatuan sambil menangkap maklumat tambahan.
Pertimbangkan senario berikut: anda ingin mencipta model pangkalan data dengan perhubungan banyak-ke-banyak antara kedai dan produk. Walau bagaimanapun, setiap pautan antara kedai dan produk juga harus mengandungi nilai tambahan, seperti kuantiti stok yang tersedia.
Pada mulanya, anda mungkin mempertimbangkan untuk menggunakan banyak-kepada -banyak hubungan dengan medan tambahan terus dalam jadual pautan. Walau bagaimanapun, Doktrin 2 mengiktiraf bahawa perkaitan sebegitu bukanlah perhubungan banyak-ke-banyak tetapi sebaliknya entiti baharu dengan pengecamnya sendiri.
Untuk menangani isu ini , adalah disyorkan untuk mencipta entiti berasingan untuk maklumat stok, seperti yang dilihat dalam model pangkalan data di bawah:
[Imej model pangkalan data dengan entiti Saham berasingan]
Produk:
<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>
Kedai:
<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>
Stok:
<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>
Dengan melaksanakan pendekatan ini, anda kini boleh mengakses nilai jumlah saham dengan mudah melalui entiti Saham dan mengekalkan integriti model data anda dalam Doktrin 2.
Atas ialah kandungan terperinci Bagaimana untuk Memodelkan Perhubungan Banyak-ke-Banyak dengan Data Tambahan Menggunakan Doktrin 2?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!