Introduction :
Beaucoup Les relations à plusieurs impliquent souvent des champs supplémentaires qui fournissent des informations supplémentaires spécifiques à chaque instance de relation. Cependant, gérer de telles relations dans Doctrine 2 peut être un peu délicat. Cet article vise à clarifier comment modéliser efficacement ces relations.
Le problème :
L'utilisateur a tenté de créer un modèle de base de données avec une relation plusieurs-à-plusieurs qui inclus un champ supplémentaire pour la gestion des stocks. Cependant, ils ont rencontré des problèmes en essayant d'accéder à la valeur du montant du stock et de générer les tables de base de données à l'aide de l'outil de schéma de Doctrine.
La solution :
Comprendre de nombreux Relations -à-plusieurs avec des champs supplémentaires
Une relation plusieurs-à-plusieurs avec des champs supplémentaires est essentiellement une nouvelle entité en lui-même, puisqu'il possède désormais un identifiant (les relations avec les entités connectées) et des valeurs. Par conséquent, il ne suffit pas de la modéliser comme une table de liens sans valeurs.
Création d'entités distinctes pour les relations avec des champs supplémentaires
L'approche recommandée consiste à créer une entité distincte , tel que « Stock » dans ce cas, qui représente la relation et inclut le champ supplémentaire. Cette entité établit des relations avec les deux entités impliquées, et chaque relation est représentée par une clé étrangère dans l'entité « Stock ».
Exemples de code :
Voici un exemple de la façon dont les entités pourraient être définies dans les annotations de Doctrine 2 :
// Product Entity @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") protected $stockProducts; // Store Entity @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") protected $stockProducts; // Stock Entity @ORM\Id() @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") protected $store; @ORM\Id() @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") protected $product;
Supplémentaires Considérations :
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!