Heim >Datenbank >MySQL-Tutorial >Wie gehe ich mit Viele-zu-Viele-Beziehungen mit zusätzlichen Feldern in Lehre 2 um?

Wie gehe ich mit Viele-zu-Viele-Beziehungen mit zusätzlichen Feldern in Lehre 2 um?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-22 01:55:11774Durchsuche

How to Handle Many-to-Many Relationships with Extra Fields in Doctrine 2?

Doktrin 2 und Viele-zu-viele-Link-Tabelle mit zusätzlichem Feld: Klargestellt

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:

  • Betrag (zur Speicherung des Lagerbestandswerts)
  • Beziehungen sowohl zum Produkt als auch zum Geschäft Entitäten

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn