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

发布于 2024-12-13 12:59:06 字数 1704 浏览 2 评论 0原文

我认为我的 Doctrine schema.yml 存在配置问题,但我无法在这里找到正确的答案。

我有两个表,BetaMeeting 和 ProjectTester,它们通过 BetaMeetingAttendee 形成多对多关系。一切工作正常,我可以编辑一个测试会议,例如包含几个项目测试人员,并且关系都已正确保存。但是,当我编辑已与 Beta 会议存在关系的项目测试人员时,保存后 M:N 关系就会丢失。使用 Symfony 1.4.13 和管理生成器,以及 Doctrine 1.2,项目测试人员的编辑页面没有提及多对多关系,没有隐藏字段等。这可能是原因,数据不存在那么教义将其删除吗?我认为没有必要将其包括在内。

我的 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 对象的直接属性的编辑后关系被清除的任何线索?

I have what I assume is a configuration problem with my Doctrine schema.yml, but I can't see to strike the right answer here.

I have two tables, BetaMeeting and ProjectTester, that form a many-to-many relationship through BetaMeetingAttendee. Everything works fine, and I can edit a beta meeting for example to include several project testers, and the relationships are all saved correctly. However, when I edit a project tester that already has existing relationships with a beta meeting(s), upon save the M:N relationships are lost. Using Symfony 1.4.13 and the admin generator, and Doctrine 1.2, and the edit page for a project tester makes no mention of the many-to-many relationships, no hidden fields, etc. Could this be the reason, the data's not there so Doctrine removes it? I didn't think it would be necessary to include it.

My schema.yml is as follows, with irrelevant details removed.

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

Any clue as to why the relationships get cleared out after an edit which is concerned only with the immediate attributes of the ProjectTester object?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

温柔少女心 2024-12-20 12:59:06

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

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

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

If you have a field defined in the Form but you excluded it from the generator.yml it's like submitting an empty field and therefore it clears the relations.

You have to unset that field in the Form.class so the field retains the current values.

public function configure()
{
  unset($this['beta_meeting_list']); // or the correct value
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文