ホームページ > データベース > mysql チュートリアル > Doctrine 2 の追加フィールドを使用して多対多の関係をモデル化するにはどうすればよいですか?

Doctrine 2 の追加フィールドを使用して多対多の関係をモデル化するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-25 11:57:14
オリジナル
253 人が閲覧しました

How to Model Many-to-Many Relationships with Extra Fields in Doctrine 2?

追加フィールドを含む多対多のリンク テーブル: 詳細な説明

概要:

Many対多の関係には、多くの場合、各関係インスタンスに固有の追加情報を提供する追加フ​​ィールドが含まれます。ただし、Doctrine 2 でそのような関係を扱うのは少し難しい場合があります。この記事の目的は、これらの関係を効果的にモデル化する方法を明確にすることです。

問題:

ユーザーは、多対多の関係を持つデータベース モデルを作成しようとしました。在庫管理用の追加フィールドが含まれていました。しかし、在庫量の値にアクセスし、Doctrine のスキーマ ツールを使用してデータベース テーブルを生成しようとしたときに問題が発生しました。

解決策:

多くのことを理解する追加フィールドを使用した -対多の関係

多対多の関係追加フィールドを含む は、識別子 (接続されたエンティティとの関係) と値を持っているため、本質的にそれ自体が新しいエンティティになります。したがって、値のないリンク テーブルとしてモデル化するだけでは十分ではありません。

追加フィールドとのリレーションシップ用に別個のエンティティを作成する

推奨されるアプローチは、別個のエンティティを作成することです。 、この場合は「Stock」など、関係を表し、追加のフィールドが含まれています。このエンティティは、関係するエンティティの両方との関係を確立し、各関係は「Stock」エンティティの外部キーによって表されます。

コード例:

例を次に示します。 Doctrine 2 でエンティティをどのように定義できるかについて注釈:

// Product Entity
@ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="product")
protected $stockProducts;

// Store Entity
@ORM\OneToMany(targetEntity="Entity\Stock", mappedBy="store")
protected $stockProducts;

// Stock Entity
@ORM\Id()
@ORM\ManyToOne(targetEntity="Entity\Store", inversedBy="stockProducts")
protected $store;

@ORM\Id()
@ORM\ManyToOne(targetEntity="Entity\Product", inversedBy="stockProducts")
protected $product;
ログイン後にコピー

追加の考慮事項:

  • 自己参照クエリを避けるために、リレーションシップの 1 つを単方向にすることを検討してください (デフォルトは双方向です)。
  • データベース スキーマがオブジェクトに対応していることを確認してくださいモデル。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート