symfony2 doctrine bundle实体覆盖/替换

时间:2015-04-01 23:36:24

标签: php wordpress symfony doctrine

我遇到了特定于Doctrine ORM实体映射和覆盖EkinoWordpressBundle的供应商实体的问题。我知道有一些功能可以覆盖bundle中的默认bundle实体。当我运行doctrine:schema:update时,我得到的SchemaExceptions类似于'表格,名称为wp_users'已经存在。我试图找出如何从捆绑中忽略实体的默认学说映射以避免此问题。

到目前为止,我所做的是:

  1. 创建实体以从包中替换User和UserMeta。
  2. 我定义了ekino.wordpress.entity.user.class:MyBundleNamespace \ User和ekino.wordpress.entity.user_meta.class:config.yml中的MyBundleNamespace \ UserMeta
  3. 我使用doctrine.orm.resolve_target_entities用我自己的
  4. 替换对Ekino \ WordpressBundle \ Entity \ User和Ekino \ WordpressBundle \ Entity \ UserMeta的关联引用

    我不清楚定义自定义实体管理器以及如何帮助缓解我的问题,正如捆绑软件开发人员所建议的那样https://github.com/ekino/EkinoWordpressBundle/issues/71

    我也使用基于yml的映射定义,以防止可能的解决方案。

2 个答案:

答案 0 :(得分:0)

似乎Doctrine仍然认为Ekino' User'仍然是一个实体,而不是专门使用你的实体。我不熟悉Ekino。如果它使用基于注释的配置,您可能必须创建自己的AnnotationDriver子类并让它过滤掉您不想要的Ekino类。

在ClassMetadata的低级代码中玩游戏实际上非常有趣,但这样做会让您自担风险。

答案 1 :(得分:0)

我从一位伙伴那里得到了一些帮助,他帮助我了解维护者提出的建议解决方案原来要求我做什么。

所以在我的config.yml中,我的学说配置有以下内容

    doctrine:
        orm:
            ...
            entity_managers:
                default:
                    mappings:
                        MyCustomAppBundle: ~
                wordpress:
                    mappings:
                        EkinoWordpressBundle: ~

这解决了部分问题。我没有得到关于已经存在的表格的原始SchemaExceptions。由于我只是从捆绑包中替换了两个实体,其中一些不再属于原始实体的ClassMetadata中的关联,所以我得到了关于缺失实体的其他错误,这些错误通过将以下内容添加到doctrine:orm:来解决配置定义:

resolve_target_entities:
        Ekino\WordpressBundle\Entity\User: App\Bundle\MyCustomAppBundle\Entity\User
        Ekino\WordpressBundle\Entity\UserMeta: App\Bundle\MyCustomAppBundle\Entity\UserMeta

我最终因为必须定义单独的实体经理而放弃了学说自动化,但我认为这是一个好的妥协。

相关问题