Maison > base de données > tutoriel mysql > Comment modéliser des relations plusieurs-à-plusieurs avec des champs supplémentaires dans Doctrine 2 ?

Comment modéliser des relations plusieurs-à-plusieurs avec des champs supplémentaires dans Doctrine 2 ?

Linda Hamilton
Libérer: 2024-11-25 11:57:14
original
267 Les gens l'ont consulté

How to Model Many-to-Many Relationships with Extra Fields in Doctrine 2?

Table de liens plusieurs-à-plusieurs avec un champ supplémentaire : une explication approfondie

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;
Copier après la connexion

Supplémentaires Considérations :

  • Envisagez de rendre l'une des relations unidirectionnelle pour éviter les requêtes auto-référentielles (la valeur par défaut est bidirectionnelle).
  • Assurez-vous que le schéma de la base de données correspond au modèle objet.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal