ホームページ >データベース >mysql チュートリアル >Doctrine 2 で追加フィールドを使用して多対多の関係を実装するにはどうすればよいですか?
Doctrine 2 の追加フィールドを含む多対多のリンク テーブル
概要
データベース モデリング多くの場合、多対多の関係の作成が伴います。リレーションシップごとに追加情報を保存する必要がある場合、従来の多対多のテーブルでは不十分になります。この記事では、追加のフィールドがリンク テーブルに追加される Doctrine 2 を使用してそのような関係を作成する方法について説明します。
課題
最初に、多対多の関係を作成しようとします。フィールドを追加すると、必要な値が含まれないリンク テーブルが作成されました。その後、「Product」エンティティと「Store」エンティティへのリレーションシップを持つ別個の「Stock」テーブルを含めるようにデータベース レイアウトを再構築する試みも失敗しました。
解決策
解決の鍵この問題は、追加の値との多対多の関連付けが別個のエンティティになることを理解することにあります。この例のコンテキストでは、「金額」フィールドを持つ「在庫」テーブルは、純粋な多対多の関係ではなくなった別個のエンティティを表します。
エンティティ モデル
この理解に基づいて、次のエンティティ モデルは次のようになります。提案:
製品:
ストア:
在庫:
Doctrine 2 によるマッピング
エンティティの対応する Doctrine 2 マッピングは次のようになります:
// Product.php class Product { /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product") */ protected $stockProducts; } // Store.php class Store { /** @ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store") */ protected $stockProducts; } // Stock.php class Stock { /** @ORM\Column(type="integer") */ protected $amount; /** @ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts") */ protected $store; /** @ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts") */ protected $product; }
このアプローチに従うことで、Doctrine 2 を使用して追加フィールドとの複雑なデータベース関係を作成でき、柔軟性が向上します。データモデリングにおいて。
以上がDoctrine 2 で追加フィールドを使用して多対多の関係を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。