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 :
Magasin :
Stock :
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!