【问题标题】:Propel 1.6 & Symfony 2: Bundle inheritance and schema dependanciesPropel 1.6 & Symfony 2:捆绑继承和模式依赖
【发布时间】:2013-06-03 18:06:33
【问题描述】:

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

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

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

注意我研究了 Propel 的模式/模型继承概念,但没有一个解决方案适合这个问题。

【问题讨论】:

    标签: php database symfony architecture propel


    【解决方案1】:

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

    <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() 覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-25
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多