當前我們正在開發一個Zend Framework 2和Doctrine 2的非常靈活和模塊化的應用程序。在這個應用程序中有多個Doctrine實體,例如,假設模塊Products
中的實體Product
。該模塊Products
是產品管理的基礎/默認模塊。原則繼承替換
我們希望能夠爲客戶創建自定義Products
模塊(XProducts
)。因此,我創建了一個新實體XProduct
(帶有一些額外字段),它擴展了Product
。
因此,如果自定義模塊啓用,我想使用XProduct
和其他Product
,但從來沒有在一起(在同一個項目中)。
如果我使用@Entity對兩個實體進行了註釋,它將部分工作;例如findAll
工作完美,但find
不起作用:創建的SELECT語句包含正確的列,但WHERE子句錯誤。例如:
SELECT t1.id AS id2, t1.name AS name3 FROM products t1 WHERE t0.id = ?
我想t1
代表ProductX
和t0
爲Product
但我想不出爲什麼列是正確的(t1
),但在where子句不是(t0
)。
我知道Doctrine提供了Single Table Inheritance來實現繼承,但是因此必須有DiscriminatorColumn並且需要在base/default實體上定義DiscriminatorMap。這不適合我們,因爲如果我們爲客戶添加一個新的自定義模塊(而這不是我們想要的),我們需要更改基本/默認模塊。
有沒有人有解決這個問題的線索?謝謝!
我正在嘗試相同的方法,但問題是抽象實體類(AbstractProduct)不能在DQL查詢中使用。根據[手冊](http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html)映射的超類不能查詢。你如何編寫適用於Product和XProduct的查詢? – aimfeld