Doctrine / Symfony在保存时失去了M:N关系

时间:2011-11-04 21:48:31

标签: database symfony1 doctrine yaml

我认为我的Doctrine schema.yml是一个配置问题,但我看不到在这里找到正确的答案。

我有两个表,BetaMeeting和ProjectTester,通过BetaMeetingAttendee形成多对多关系。一切正常,我可以编辑测试版会议,例如包括几个项目测试人员,并且关系都可以正确保存。但是,当我编辑已经与beta会议存在关系的项目测试人员时,保存时M:N关系将丢失。使用Symfony 1.4.13和admin生成器,以及Doctrine 1.2,以及项目测试人员的编辑页面,没有提到多对多关系,没有隐藏字段等。这可能是原因,数据不在那里所以Doctrine删除了吗?我认为没有必要加入它。

我的schema.yml如下,删除了无关的详细信息。

BetaMeeting:
  connection: doctrine
  tableName: BetaMeeting
  columns:
    id:              { type: integer(4), primary: true, autoincrement: true }
    project_id:      { type: integer(4) }
    date:            { type: date }
  relations:
    Project:
      local: project_id
      foreign: id
      foreignAlias: BetaMeetings
    ProjectTester:
      class: ProjectTester
      refClass: BetaMeetingAttendee
      foreignAlias: BetaMeetings

BetaMeetingAttendee:
  connection: doctrine
  tableName: BetaMeetingAttendee
  columns:
    beta_meeting_id:   { type: integer(4), primary: true, autoincrement: false }
    project_tester_id: { type: integer(4), primary: true, autoincrement: false }
  relations:
    BetaMeeting:
      foreignAlias: BetaMeetingAttendees
    ProjectTester:
      foreignAlias: BetaMeetingAttendees

ProjectTester:
  connection: doctrine
  tableName: ProjectTester
  columns:
    id:                  { type: integer(4), primary: true, autoincrement: true }
    tester_id:           { type: integer(4) }
    project_id:          { type: integer(4) }
  relations:
    Tester:
      local: tester_id
      foreign: id
      foreignAlias: Projects
    Project:
      local: project_id
      foreign: id
      foreignAlias: ProjectTesters

关于为什么在编辑后清除关系的任何线索,只关注ProjectTester对象的直接属性?

1 个答案:

答案 0 :(得分:2)

如果您在表单中定义了一个字段,但是您将其从generator.yml中排除,则就像提交一个空字段一样,因此它会清除关系。

您必须在Form.class中取消设置该字段,以便该字段保留当前值。

public function configure()
{
  unset($this['beta_meeting_list']); // or the correct value
}