我試圖實現一個訂閱模型,可以應用於多個實體使用單個表/類與教條2.請參見下面的示例解釋。學說ManyToMany區分字段 - 可能嗎?
架構(陽明):
User:
type: entity
table: users
id: int
name: string
Subscription:
type: entity
table: subscriptions
id: int
object_type: string
object_id: int
user_id: int
Feature:
type: entity
table: features
id: int
name: string
manyToMany:
subscribers:
targetEntity: User
joinTable:
name: subscriptions
joinColumns:
object_id:
referencedColumnName: id
Issue:
type: entity
table: issues
id: int
subject: string
manyToMany:
subscribers:
targetEntity: User
joinTable:
name: subscriptions
joinColumns:
object_id:
referencedColumnName: id
表數據會是這個樣子:
users:
| id | name |
| 1 | John |
| 2 | Joe |
features:
| id | name |
| 1 | Feature A |
| 2 | Feature B |
issues:
| id | subject |
| 1 | Issue 1 |
| 2 | Issue 2 |
subscriptions:
| id | object_type | object_id | user_id
| 1 | feature | 1 | 1 <- John is subscribed to Feature A
| 2 | issue | 1 | 1 <- John is subscribed to Issue 1
我會預計將有一個額外的 '區別' 字段,我可以在模型的manyToMany關係中例如:
manyToMany:
subscribers:
targetEntity: User
joinTable:
name: subscriptions
joinColumns:
object_id:
referencedColumnName: id
object_type:
value: feature
我知道後者靈魂不存在於教義中,但我會好奇你將如何解決這種情況?
的想法是將動態地擴展這個訂閱「性狀」到其他實體以及(例如項目,團隊等)
我一定要介紹不同的表像feature_subscribers
和issue_subscribers
所有訂閱。等等,還是有更優雅的方式?
UPDATE:
我不想認購方目標對象的種類就知道了。我只是想要從實體(特徵,問題等)中獲取訂閱者(User
的集合)。
這種情況下,Mapped Superclasses可能出現在哪裏? –
你是什麼意思?「我只是想從實體(特徵,問題等)中獲取訂閱者(用戶的集合)。」 ...你在尋找查詢來查找所有用戶的問題/功能嗎?請澄清:) – nifr
我的意思是我不會查詢不同類型的對象的訂閱。即我不願意使用Doctrine根據Subscription對象自動獲取適當的對象/實體(如問題或功能)。 我正在尋找一個功能或問題對象的訂閱用戶列表,例如'$ feature-> getSubscribers()'或'$ issue-> getSubscribers()' –