目前,我们正在使用 Zend Framework 2 和 Doctrine 2 开发一个非常灵活和模块化的应用程序。在这个应用程序中,有多个 Doctrine 实体,例如,假设Product
模块中的实体Products
。该模块Products
是产品管理的基本/默认模块。
我们希望能够Products
为客户 ( XProducts
) 创建自定义模块。因此,我创建了一个新实体XProduct
(带有一些额外的字段),它扩展了Product
.
因此,如果启用了自定义模块,我想使用XProduct
and else Product
,但永远不要一起使用(在同一个项目中)。
如果我用 @Entity 注释两个实体,它会部分工作;例如findAll
工作完美,但find
不起作用:创建的 SELECT 语句包含正确的列,但 WHERE 子句是错误的。例如:
SELECT t1.id AS id2, t1.name AS name3 FROM products t1 WHERE t0.id = ?
我猜t1
是 forProductX
和t0
forProduct
但我不知道为什么这些列是正确的 ( t1
) 但 where 子句不是 ( t0
)。
我知道 Doctrine 提供了单表继承来实现继承,但因此必须有一个 DiscriminatorColumn 并在基本/默认实体处定义 DiscriminatorMap。这不适合我们,因为如果我们为客户添加新的自定义模块(这不是我们想要的......),我们需要更改我们的基本/默认模块。
有没有人知道解决这个问题的线索?谢谢!