Maison > développement back-end > tutoriel php > Comment modéliser des relations plusieurs-à-plusieurs avec des valeurs supplémentaires dans Doctrine 2 à l'aide d'une table de liens ?

Comment modéliser des relations plusieurs-à-plusieurs avec des valeurs supplémentaires dans Doctrine 2 à l'aide d'une table de liens ?

Patricia Arquette
Libérer: 2024-10-24 19:37:02
original
906 Les gens l'ont consulté

How to Model Many-to-Many Relationships with Additional Values in Doctrine 2 Using a Link Table?

Doctrine 2 et table de liens plusieurs-à-plusieurs avec un champ supplémentaire

Comprendre les relations plusieurs-à-plusieurs avec des valeurs supplémentaires

Dans un Dans le modèle de base de données relationnelle, une relation plusieurs-à-plusieurs représente un scénario dans lequel plusieurs lignes d'une table peuvent être associées à plusieurs lignes d'une autre. Cependant, lorsque des valeurs supplémentaires sont introduites dans cette relation, celle-ci se transforme en une nouvelle entité. Cette entité possède un identifiant (les deux relations avec les entités connectées) et des données supplémentaires.

Modélisation de relations plusieurs-à-plusieurs avec des valeurs supplémentaires dans la Doctrine 2

Pour modéliser efficacement des relations plusieurs-à-plusieurs de nombreuses relations avec des valeurs supplémentaires dans Doctrine 2, envisagez de créer un tableau séparé pour représenter la relation. Cette table, communément appelée « table de liens », contiendra les colonnes nécessaires pour établir des relations avec les deux tables parents, ainsi que tout attribut(s) supplémentaire(s) associé(s) à la relation.

Mappage de la table de liens Entité dans Doctrine 2

Dans le contexte de Doctrine 2, vous pouvez mapper cette table de liens comme une nouvelle entité. Prenons un exemple de scénario impliquant des produits et des magasins :

Entité produit :

<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>
Copier après la connexion

Entité magasin :

<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>
Copier après la connexion

Entité de stock :

<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal