多くのエンティティを 1 対多として同じエンティティの主キーにマップする必要があります。
簡潔にするために、少し簡略化してみます。
Web サイトまたは iOS アプリに表示される場合、異なる順序で並べる必要があるニュースと製品テーブルがあるとします。将来、他の20以上のテーブルを管理する必要があるため、すべてのテーブルの注文情報(「位置」と呼ばれる)を格納するテーブルを1つだけにしたいと考えています。
簡略化された表は次のとおりです。
_________
|news |
---------
|id (pk) |
|title |
---------
_________
|product |
---------
|id (pk) |
|name |
---------
__________
|position | id + table + target are the composite primary key
----------
|id (pk) | can refer to a news.id or to a product.id depending on table field value
|table(pk) | define if the id refer to a news or to a product
|target(pk)| can be "web" or "ios"
|position | an integer
----------
3 possible position records could be:
id - table - position - target
1 news 1 web
1 news 1 ios
1 product 1 web
ご覧のとおり、同じ ID を 3 回繰り返すことができます。これは少し汚れており、おそらくベスト プラクティスではないことはわかっていますが、テーブルを追加する必要があるたびに (プレス、アーティスト、イベントなど)、多くのテーブルとエンティティの作成を節約できます。私のニーズに合わせて Doctrine2 を使用する唯一の方法は、xxx_position_web と xxx_position_ios テーブルを作成し、将来管理する必要があるすべての新しいテーブルに関連するエンティティを作成することです。
Symfony2 の Doctrine2 エンティティでこのようなものを管理することは可能ですか? 私と非常によく似た状況を説明するリンクを見つけましたhttps://doctrine-orm.readthedocs.org/en/latest/tutorials/composite-primary-keys.html?highlight=composite#identity-through-foreign-entitiesしかし私は自分の状況にそれを適用することができません。