与refClass中的属性的多对多关系

时间:2009-10-21 20:00:49

标签: model symfony1 doctrine data-modeling orm

我目前正在设计一个网站,使用symfony(1.2)和Doctrine作为ORM。

我有一个晚餐课,一个Criteria课和一个Mark课。

  • 马克与晚餐和a相关联 标准,并具有私人属性, 比如DateOfMark,MarkValue等。
  • 晚餐和标准可以有很多 标记(或没有)。

当我使用Doctrine时,我使用以下代码在schema.yml中定义了这个模型:

Dinner:
  columns:
    date: { type: timestamp, notnull: true }
    nb_presents: { type: integer, notnull: true }
  relations:
    Marks:
      class:    Criteria
      local:    dinner_id
      foreign:  criteria_id
      refClass: Mark

Criteria:
  columns:
    name: { type: string(50), notnull: true }
  relation:
    Marks:
      class:    Dinner
      local:    criteria_id
      foreign:  dinner_id
      refClass: Mark

Mark:
  columns:
    criteria_id: { type: integer, primary: true }
    dinner_id: { type: integer, primary: true }
    value: { type: integer, notnull: true }
  relations:
    Dinner:
      local:    dinner_id
      foreign:  id
    Criteria:
      local:    criteria_id
      foreign:  id

问题是由Doctrine生成的SQL,它在FOREIGN KEY CONSTRAINT上向Mark.dinner_id添加Dinner.id(这是正确的) AND 它添加了{{ 1}}在FOREIGN KEY CONSTRAINTDinner.id(这真的不对,因为晚餐可能有很多标记)。

问题

我错过了什么吗?我在课间做这种关系错了吗?

谢谢你。

1 个答案:

答案 0 :(得分:3)

您需要将关系定义为一对多关系。试试这个(请注意“晚餐和标准”定义中添加的“类型:多个”):

Dinner:
  columns:
    date: { type: timestamp, notnull: true }
    nb_presents: { type: integer, notnull: true }
  relations:
    Marks:
      class:    Criteria
      local:    dinner_id
      foreign:  criteria_id
      refClass: Mark
      type: many

Criteria:
  columns:
    name: { type: string(50), notnull: true }
 relation:
   Marks:
     class:    Dinner
     local:    criteria_id
     foreign:  dinner_id
     refClass: Mark
     type: many

Mark:
  columns:
    criteria_id: { type: integer, primary: true }
    dinner_id: { type: integer, primary: true }
    value: { type: integer, notnull: true }
  relations:
    Dinner:
      local:    dinner_id
      foreign:  id
    Criteria:
      local:    criteria_id
      foreign:  id