Klärung der Abfrage
Im Bei der ursprünglichen Frage suchte der Benutzer nach Anleitung zum Erstellen einer Viele-zu-Viele-Beziehung innerhalb einer Verknüpfungstabelle, die ein zusätzliches Feld (Bestandsmenge) enthielt. Die Herausforderung entstand beim Zugriff auf den Bestandswert mithilfe von Doctrine und beim Generieren der Datenbanktabellenstruktur.
Behebung des Problems
Das Problem entstand aus der Annahme, dass ein Many-to -Viele Beziehungen mit zusätzlichen Werten könnten als solche behandelt werden. Eine Viele-zu-Viele-Beziehung mit zusätzlichen Werten wird jedoch zu einer neuen Entität mit einer Kennung und Werten.
Lösung
Die Lösung bestand darin, eine separate Entität namens Stock zu erstellen mit den folgenden Spalten:
Dadurch konnte das System die Viele-zu-Viele-Beziehung genau modellieren und mithilfe von Doctrine auf den Bestandswert zugreifen.
Aktualisierte Entitäten
Unten sind die angepassten Einheiten aufgeführt Definitionen:
Produkt:
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; }
Shop:
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; }
Lagerbestand:
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; }
Datenbank Struktur
Diese Änderung führte zu der unten gezeigten Datenbankstruktur:
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) );
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Viele-zu-Viele-Beziehungen mit zusätzlichen Feldern in Lehre 2 um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!