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

Doctrine 2 を使用して追加データを使用して多対多の関係をモデル化する方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 07:25:29201ブラウズ

How to Model Many-to-Many Relationships with Additional Data Using Doctrine 2?

教義 2 と追加フィールドを含む多対多リンク テーブル

データベース モデリングでは、追加のデータ ポイントを使用して多対多の関係を表現するのが困難な場合があります。人気の PHP ORM である Doctrine 2 は、「リンク テーブル」として知られる技術を組み込むことでソリューションを提供します。これらのテーブルはエンティティ間の仲介者として機能し、追加情報を取得しながら関連付けを容易にします。

次のシナリオを考えてみましょう: 店舗と商品の間に多対多の関係を持つデータベース モデルを作成したいとします。ただし、店舗と商品の間の各リンクには、利用可能な在庫数量などの追加の値も含める必要があります。

データベース モデル

最初は、多対モデルの使用を検討したかもしれません。 -多くのリンクテーブル内の追加フィールドとの関係。ただし、Doctrine 2 では、そのような関連付けは実際には多対多の関係ではなく、独自の識別子を持つ新しいエンティティであると認識しています。

解決策: 個別の株式エンティティ

この問題に対処するにはでは、以下のデータベース モデルに見られるように、株式情報用に別のエンティティを作成することをお勧めします:

[別の Stock エンティティを持つデータベース モデルのイメージ]

Entities

製品:

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

このアプローチを実装することで、Stock エンティティを通じて在庫金額の値に簡単にアクセスし、Doctrine 2 のデータ モデルの整合性を維持できるようになります。

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

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