Doctrine2 ORM には、多対多の関連付けを処理する技術的な方法が 2 つあります。
1/ 2 つのエンティティ間の「単純な」関係で、追加の属性がない場合:
- エンティティ間に @ManyToMany 関連付けを使用する
- この場合、関連付けエンティティなしで、リンク テーブルが直接使用されます。
2/ リンク テーブルが余分なフィールドまたは 2 つ以上のエンティティを導入する場合:
- 関連クラス、つまり「実際の」エンティティを使用して、リンク テーブルをマップします。
- この場合、直接の ManyToMany アソシエーションは、参加エンティティ間のOneToMany/ManyToOneアソシエーションに置き換えられます。
これら 2 つの実装はまったく異なります。
ただし、場合によっては、将来のビジネス要件で、フィールドを追加するなどして、単純な関連付けをすぐに変更する必要が生じることがあります。 この場合、既存のエンティティの直接の ManyToMany 関連付けを 2 番目の実装に置き換え、影響を受けるコードをリファクタリングする必要があります。
- では、すべての ManyToMany 関連付けを処理するために常に関連付けエンティティを使用するのは良い方法ですか?
- それ以外の場合、適切な実装を選択し、この種のドメイン モデルの進化を処理するためのベスト プラクティスは何ですか?