【问题标题】:How to build self referencing tables in Symfony using Propel ORM如何使用 Propel ORM 在 Symfony 中构建自引用表
【发布时间】:2011-09-25 19:39:06
【问题描述】:

我在尝试使用 Propel ORM 从 symfony 项目中的现有数据库构建模型时出错。

错误是这样的:

build-propel.xml:474:20:双向定义外键a_table_on_my_schema_FK_1表示的1:1关系; Propel 目前不支持此功能(如果您必须同时拥有两个外键约束,请考虑使用自定义 SQL 文件添加此约束。)

schema.yml 文件确实很广泛,但是导致错误的表的描述(第一个未正确创建)是这样的:

self_referenced_table:
_attributes: { phpName: SelfReferencedTable }
[...]
JERARQUIC_CODE: { phpName: JerarquicCode, type: INTEGER, size: '8', required: false, foreignTable: self_referenced_table, foreignReference: JERARQUIC_CODE, onDelete: RESTRICT, onUpdate: RESTRICT }
[...]

我认为这个错误是因为自引用表。

我需要在许多元素之间实现一个不规则的关系,所以这个实现是一个很好的方法。但是导致我在施工时出现这个问题。

你能给我一些线索吗?有人有这个错误吗?你会怎么做?

谢谢!! :D

【问题讨论】:

  • 我认为这不是因为自引用 table 本身,而是因为自引用 column 在表中。这对我来说似乎没有意义,好像它是单值的,那么它唯一可以引用的记录就是它自己。你确定这就是你的意思吗?
  • 好吧,我完全不确定。但只有自引用表在构建时崩溃。如果我将它们从 schema.yml 中删除,则建筑物会正常

标签: mysql symfony1 propel self-reference


【解决方案1】:

已解决:正如@Colin Fine 所说,这不是自引用表错误。错误出现在源数据库上。我从 mysql 上的现有数据库生成了 schema.yml。错误就在那里:引用的目标属性不是表的标识符,而是引用属性本身。因此,生成的 schema.yml 包含错误的定义。我觉得我解释得不够清楚:

self_referenced_table 是:

_attributes: { phpName: SelfReferencedTable }
[...]
JERARQUIC_CODE: { phpName: JerarquicCode, type: INTEGER, size: '8', required: false, foreignTable: self_referenced_table, foreignReference: JERARQUIC_CODE, onDelete: RESTRICT, onUpdate: RESTRICT }
[...]

self_referenced_table 应该是:

_attributes: { phpName: SelfReferencedTable } [...]
JERARQUIC_CODE: { phpName: JerarquicCode, type: INTEGER, size: '8', required: false, foreignTable: self_referenced_table, foreignReference: TABLE_CODE, onDelete: RESTRICT, onUpdate: RESTRICT }
[...]

【讨论】:

    猜你喜欢
    • 2011-10-10
    • 2011-09-16
    • 2011-11-07
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多