Gérer des relations plusieurs-à-plusieurs avec des champs supplémentaires à l'aide de Doctrine 2
Dans la modélisation de bases de données, une relation plusieurs-à-plusieurs implique souvent une table de liens pour établir des connexions entre les entités. Cependant, lorsque des valeurs supplémentaires sont associées à ces tables de liens, les relations plusieurs-à-plusieurs traditionnelles deviennent inadéquates.
Considérez le scénario dans lequel un système doit suivre le stock de produits dans plusieurs magasins. Une relation plusieurs-à-plusieurs de base pourrait être créée avec la structure de base de données suivante :
Product: - product_id - product_name Store: - store_id - store_name Stock: - amount - product_id - store_id
Cependant, cette structure n'a pas la capacité de suivre les montants des stocks pour chaque combinaison de produits et de magasins. Pour résoudre ce problème, un champ supplémentaire, tel que « montant », peut être ajouté au tableau « Stock ». Il en résulte une nouvelle entité plutôt qu'une simple table de liens, car elle possède désormais à la fois des identifiants et des valeurs.
Dans Doctrine 2, cela peut être implémenté en utilisant les définitions d'entités suivantes :
Product: /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */ protected $stockProducts; Store: /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") */ protected $stockProducts; 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 définissant une entité « Stock » distincte avec des relations bidirectionnelles avec « Produit » et « Magasin », nous pouvons gérer efficacement les montants de stock associés à chaque combinaison de produit et de magasin.
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!