Wie modelliert man Viele-zu-Viele-Beziehungen mit zusätzlichen Daten mithilfe von Doktrin 2?

Mary-Kate Olsen
Freigeben: 2024-10-25 07:25:29
Original
200 Leute haben es durchsucht

How to Model Many-to-Many Relationships with Additional Data Using Doctrine 2?

Doktrin 2 und Viele-zu-viele-Verknüpfungstabelle mit zusätzlichem Feld

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.

Datenbankmodell

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.

Lösung: Separate Aktieneinheit

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]

Entitäten

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

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

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

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!

Quelle:php
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!