Maison  >  Article  >  développement back-end  >  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
Patricia Arquetteoriginal
2024-10-24 19:37:02742parcourir

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>

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>

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>

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:
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