Symfony2 + Doctrine。实体存在于两个包中

时间:2014-04-08 16:17:49

标签: php entity-framework symfony doctrine-orm doctrine

前段时间我将常用功能移到单独的包中,因此可以在其他项目中重复使用。在其中一个包中,我有一个名为Person的实体。 Person与由其他人控制的现有DB表相关。在我的可重用捆绑包中,Person实体映射了人员DB表中的一些字段,而不是所有字段。

在我当前的项目中,我需要在人员数据库表中使用更多字段,但我无法更改可重用软件包中的实体,因为现在它已在各种项目中使用。

我试图扩展现有的Person实体,但app / console doctrine:schema:create忽略了我的子类中的映射字段。如果我将@ORM表映射添加到子类,app / console doctrine:schema:create complains并说" person表已经存在" (或类似的东西)。

有没有办法扩展我的新捆绑包中的现有Person实体,并为其添加更多字段?

1 个答案:

答案 0 :(得分:1)

根据Symfony2 Documentation,您无法覆盖捆绑包的实体。

  

由于Doctrine的工作方式,无法覆盖实体   捆绑的映射。但是,如果bundle提供映射的超类   (例如entity中的用户FOSUserBundle)可以覆盖   属性和关联。详细了解此功能及其功能   Doctrine documentation中的限制。

虽然创建一个希望在几个中使用它的捆绑包,但最好是实现像FOSUserBundle这样的实体。或者将Entity类定义为Abstract基类,这样您就可以创建child bundle并轻松覆盖您喜欢的任何部分。由于无法实现实体覆盖,您必须通过扩展共享包中定义的抽象类来实现具体的实体类

希望你能得到答案。

快乐的编码!!