我有一个扩展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()覆盖。