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
Barbara Streisandoriginal
2024-11-25 07:47:111094parcourir

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

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

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

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