Bei der Datenbankmodellierung kann die Darstellung von Viele-zu-viele-Beziehungen mit zusätzlichen Datenpunkten eine Herausforderung sein. Doctrine 2, ein beliebtes PHP-ORM, bietet eine Lösung, indem es eine Technik integriert, die als „Link-Tabellen“ bekannt ist. Diese Tabellen dienen als Vermittler zwischen Entitäten, erleichtern Zuordnungen und erfassen gleichzeitig zusätzliche Informationen.
Stellen Sie sich das folgende Szenario vor: Sie möchten ein Datenbankmodell mit einer Viele-zu-Viele-Beziehung zwischen Geschäften und Produkten erstellen. Allerdings sollte jede Verknüpfung zwischen einem Geschäft und einem Produkt auch einen zusätzlichen Wert enthalten, beispielsweise die Menge des verfügbaren Lagerbestands.
Zunächst hätten Sie vielleicht über die Verwendung eines Many-to nachgedacht -many-Beziehung mit einem zusätzlichen Feld direkt in der Verknüpfungstabelle. Doktrin 2 erkennt jedoch an, dass es sich bei einer solchen Assoziation nicht wirklich um eine Viele-zu-Viele-Beziehung handelt, sondern vielmehr um eine neue Entität mit einer eigenen Kennung.
Um dieses Problem zu beheben , wird empfohlen, eine separate Entität für die Bestandsinformationen zu erstellen, wie im Datenbankmodell unten zu sehen:
[Bild des Datenbankmodells mit separater Bestandsentität]
Produkt:
<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>
Shop:
<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>
Lagerbestand:
<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>
Durch die Implementierung dieses Ansatzes können Sie jetzt einfach über die Entität „Stock“ auf den Bestandswert zugreifen und die Integrität Ihres Datenmodells in Doktrin 2 aufrechterhalten.
Das obige ist der detaillierte Inhalt vonWie modelliert man Viele-zu-Viele-Beziehungen mit zusätzlichen Daten mithilfe von Doktrin 2?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!