学说不能正确地输出关系

时间:2010-04-28 08:37:39

标签: symfony1 doctrine orm entity-relationship

我有一个MySQL 5.1.41数据库,我正在尝试填充学说,但是学说没有正确地插入关系。我的YAML是:

Locatie:
 connection: doctrine
 tableName: locatie
  columns:
   loc_id:
    type: integer(4)
    fixed: false
    unsigned: false
    primary: true
    autoincrement: true
  org_id:
    type: integer(4)
    fixed: false
    unsigned: false
    primary: false
    notnull: false
    autoincrement: false
  naam:
    type: string(30)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
  straat:
    type: string(30)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
  huisnummer:
    type: integer(4)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
  huisnummer_achtervoegsel:
    type: string(3)
    fixed: false
    unsigned: false
    primary: false
    notnull: false
    autoincrement: false
  plaats:
    type: string(25)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
  postcode:
    type: string(6)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
  telefoon:
    type: string(12)
    fixed: false
    unsigned: false
    primary: false
    notnull: true
    autoincrement: false
  opmerking:
    type: string()
    fixed: false
    unsigned: false
    primary: false
    notnull: false
    autoincrement: false
  inloggegevens:
    type: string()
    fixed: false
    unsigned: false
    primary: false
    notnull: false
    autoincrement: false
relations:
  Organisatie:
    local: org_id
    foreign: org_id
    type: one
    onDelete: CASCADE
    onUpdate: CASCADE

Organisatie:
  connection: doctrine
  tableName: organisatie
  columns:
    org_id:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    naam:
      type: string(30)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    straat:
      type: string(30)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    huisnummer:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    huisnummer_achtervoegsel:
      type: string(3)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    plaats:
      type: string(25)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    postcode:
      type: string(6)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    telefoon:
      type: string(12)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    opmerking:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
    Locatie:
      local: org_id
      foreign: org_id
      type: many

现在,如果创建一个组织,然后创建一个具有组织外键的位置,一切都很好。但是当我尝试用phpmyadmin更新org_id时,我得到了一个约束错误。如果我手动将外键设置为ON_UPDATE CASCADE,它确实有效。

为什么学说不设置此选项?

我让它在Propel中工作,但我真的想为此使用学说。

1 个答案:

答案 0 :(得分:0)

好吧,你无法更新org_id,因为它是由位置表引用的。如果您更改它,则意味着组织有一个不存在的位置---外键失败。首先插入您的位置数据,然后所有位置值都成为组织的可能值,或者如您所述使用onCascade操作。

此外,您可以做的是首先定义Organisatie表,并仅包含此表的关系声明(一个定义对于Doctrine来说已经足够了)。现在引用了Locatie表,您可以自由地使用它的键。当然,您仍然无法从Organisatie表中引用不存在的内容。

我还发现你的架构目前说“一个组织有很多位置”,虽然我猜你有意“一个地方有很多组织”。如果确实如此,请将Organisatie-> relations-> Locatie更改为“type:one,foreignType:many”,并从Locatie表中删除关系声明。

希望有所帮助。