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
Freigeben: 2024-12-22 01:55:11
Original
773 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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)
);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage