Maison > base de données > tutoriel mysql > Comment implémenter une relation plusieurs-à-plusieurs avec des champs supplémentaires dans Doctrine 2 ?

Comment implémenter une relation plusieurs-à-plusieurs avec des champs supplémentaires dans Doctrine 2 ?

Barbara Streisand
Libérer: 2024-11-25 07:47:11
original
1127 Les gens l'ont consulté

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

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

Configuration d'entité

Doctrine 2 interprète plusieurs -à plusieurs en tant qu'entité lorsqu'elle contient des propriétés supplémentaires, devenant ainsi une entité distincte avec son propre identifiant unique. Ceci est essentiel pour suivre les valeurs associées à chaque relation.

Pour implémenter cela dans votre base de données, considérez l'entité suivante structure :

Produit :

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="product")
 * @ORM\Entity()
 */
class Product
{
    /**
     * @ORM\Id()
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\Column(name="product_name", type="string", length=50, nullable=false)
     */
    protected $name;

    /**
     * @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product")
     */
    protected $stockProducts;
}
Copier après la connexion

Magasin :

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="store")
 * @ORM\Entity()
 */
class Store
{
    /**
     * @ORM\Id()
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\Column(name="store_name", type="string", length=50, nullable=false)
     */
    protected $name;

    /**
     * @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store")
     */
    protected $stockProducts;
}
Copier après la connexion

Stock :

namespace Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="stock")
 * @ORM\Entity()
 */
class Stock
{
    /**
     * @ORM\Column(type="integer")
     */
    protected $amount;

    /**
     * @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts")
     * @ORM\JoinColumn(name="store_id", referencedColumnName="id", nullable=false)
     */
    protected $store;

    /**
     * @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts")
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=false)
     */
    protected $product;
}
Copier après la connexion

Cette configuration établit trois entités : Produit, Magasin et Stock. L'entité Stock contient le champ montant comme propriété supplémentaire, ce qui en fait une relation plusieurs-à-plusieurs avec des valeurs.

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 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