Propel 1.6 &Symfony 2:包继承和模式依赖


Propel 1.6 & Symfony 2: Bundle inheritance and schema dependancies

我有一个扩展vendor/CoreBundle的src/SiteBundle,我想在SiteBundle schema.xml中添加一个"label"模型/表,而不复制CoreBundle schema.xml。你说没问题?!呸!

如果SiteBundle"label"表有一个指向CoreBundle中定义的表的外键(例如label.product_id),问题就来了。Propel拒绝构建"label"模型,因为它认为它有一个未解决的列依赖关系。

是否有一种方法在构建时上下文化两个schema.xml文件,以便Propel理解SiteBundle扩展CoreBundle?我想一个简单的schema.xml合并是我想要的…

注意:我已经研究了Propel的模式/模型继承的概念,但是这些解决方案都不适合这个问题。

事实证明,Propel Bundle确实允许您在构建时将schema.xml文件上下文化,方法是将两个schema.xml文件的包属性设置为相同的东西

<database name="site" namespace="Site'Bundle'Model" package="default">
    ...
</database>

或通过设置

propel.namespace.autoPackage: true

这里的Propel构建属性文档。

然而,我的问题实际上来自于一个简单的事实,我误解了Symfony2的bundle override方法getParent()是如何工作的。我的问题可以通过单独留下Propel配置/模式和; 来最干净地解决。
  • 删除SiteBundle::getParent()方法;
  • 为SiteBundle schema.xml文件加上前缀(任何东西),以便Propel可以访问两个模式文件,尽管getParent()覆盖。