Maison >base de données >tutoriel mysql >Comment implémenter une relation plusieurs-à-plusieurs avec un champ supplémentaire dans Doctrine 2 ?

Comment implémenter une relation plusieurs-à-plusieurs avec un champ supplémentaire dans Doctrine 2 ?

DDD
DDDoriginal
2024-11-30 07:57:12370parcourir

How to Implement a Many-to-Many Relationship with an Extra Field in Doctrine 2?

Table de liens plusieurs-à-plusieurs avec un champ supplémentaire dans Doctrine 2

Introduction
Modélisation de base de données implique souvent la création de relations plusieurs-à-plusieurs. Dans les cas où des informations supplémentaires doivent être stockées pour chaque relation, les tables plusieurs-à-plusieurs traditionnelles deviennent insuffisantes. Cet article explore la création de telles relations à l'aide de Doctrine 2, où un champ supplémentaire est ajouté à la table de liens.

Défis
Au départ, tenter de créer une relation plusieurs-à-plusieurs avec un champ supplémentaire aboutissait à une table de liens sans les valeurs souhaitées. Les tentatives ultérieures visant à restructurer la présentation de la base de données pour inclure une table « Stock » distincte avec des relations avec les entités « Produit » et « Magasin » se sont également révélées infructueuses.

Solution
La clé pour résoudre ce problème réside dans la compréhension qu'une association plusieurs-à-plusieurs avec des valeurs supplémentaires devient une entité distincte. Dans le contexte de cet exemple, la table « Stock » avec son champ « montant » représente une entité distincte qui n'est plus une pure relation plusieurs-à-plusieurs.

Modèle d'entité
Sur la base de cette compréhension, le modèle d'entité suivant est proposé :

  • Produit :

    • Contient les informations sur le produit, y compris le nom et le stock inventaire.
  • Magasin :

    • Similaire au produit mais stocke les informations et le stock du magasin inventaire.
  • Stock :

    • Représente la relation entre le produit et le magasin, y compris le champ « montant ».

Cartographie avec Doctrine 2
Le mappage Doctrine 2 correspondant pour les entités ressemblerait à ceci :

// Product.php
class Product
{
    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */
    protected $stockProducts;
}

// Store.php
class Store
{
    /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") */
    protected $stockProducts;
}

// Stock.php
class Stock
{
    /** @ORM\Column(type="integer") */
    protected $amount;

    /** @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") */
    protected $store;

    /** @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") */
    protected $product;
}

En suivant cette approche, vous pouvez créer des relations de base de données complexes avec des champs supplémentaires à l'aide de Doctrine 2, offrant une plus grande flexibilité en modélisation de données.

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