Propel 1.6& Symfony2:捆绑继承和模式依赖

时间:2013-06-07 12:20:22

标签: php database symfony architecture propel

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

如果SiteBundle“label”表具有指向CoreBundle中定义的表的外键(例如label.product_id),则会出现问题。 Propel拒绝构建“标签”模型,因为它认为它具有未解析的列依赖性。

有没有办法在构建时将两个schema.xml文件设置为上下文,以便Propel了解SiteBundle是否扩展了CoreBundle?我想一个简单的schema.xml合并就是我所追求的......

N.B。我已经研究过Propel关于模式/模型继承的概念,但这些解决方案都不适合这个问题。

1 个答案:

答案 0 :(得分:0)

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

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

或通过设置

propel.namespace.autoPackage: true

推动构建属性文档here

但是,我的问题实际上来自于一个简单的事实,我误解了Symfony2的包覆盖方法 getParent()是如何工作的。通过单独保留Propel配置/模式,可以最彻底地解决我的问题;

  • 删除SiteBundle :: getParent()方法,或;
  • 在SiteBundle schema.xml文件前面添加一些内容(任何内容),以便Propel可以访问两个模式文件,尽管getParent()覆盖。