ホームページ  >  記事  >  バックエンド開発  >  リンク テーブルを使用して Doctrine 2 で追加の値を持つ多対多の関係をモデル化する方法は?

リンク テーブルを使用して Doctrine 2 で追加の値を持つ多対多の関係をモデル化する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-24 19:37:02742ブラウズ

How to Model Many-to-Many Relationships with Additional Values in Doctrine 2 Using a Link Table?

Doctrine 2 と追加のフィールドを持つ多対多のリンク テーブル

追加の値を持つ多対多の関係を理解する

リレーショナル データベース モデルでは、多対多の関係は、1 つのテーブルの複数の行を別のテーブルの複数の行に関連付けることができるシナリオを表します。ただし、この関係に追加の値が導入されると、それは新しいエンティティに変わります。このエンティティは、識別子 (接続されたエンティティへの 2 つの関係) と追加データを所有します。

Doctrine 2 の追加の値を使用した多対多の関係のモデル化

多対多の関係を効果的にモデル化するにはDoctrine 2 には追加の値を持つ多くの関係があるため、関係を表す別のテーブルを作成することを検討してください。一般に「リンク テーブル」と呼ばれるこのテーブルには、両方の親テーブルとの関係を確立するために必要な列と、その関係に関連付けられた追加の属性が含まれます。

リンク テーブルのマッピングDoctrine 2 のエンティティ

Doctrine 2 のコンテキストでは、このリンク テーブルを新しいエンティティとしてマッピングできます。製品と店舗に関するシナリオの例を考えてみましょう。

製品エンティティ:

<code class="php">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;
}</code>

ストア エンティティ:

<code class="php">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;
}</code>

株式エンティティ:

<code class="php">namespace Entity;

use Doctrine\ORM\Mapping as ORM;

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

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

    /** 
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") 
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id", nullable=false) 
     */
    protected $product;
}</code>

以上がリンク テーブルを使用して Doctrine 2 で追加の値を持つ多対多の関係をモデル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。