【问题标题】:Doctrine/Symfony losing M:N relationships on saveDoctrine/Symfony 在保存时失去 M:N 关系
【发布时间】:2011-12-22 09:37:15
【问题描述】:

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

我有两个表,BetaMeeting 和 ProjectTester,它们通过 BetaMeetingAttendee 形成多对多关系。一切正常,我可以编辑一个 beta 会议,例如包括几个项目测试人员,并且所有关系都正确保存。但是,当我编辑一个已经与 beta 会议建立关系的项目测试人员时,保存后 M:N 关系会丢失。使用 Symfony 1.4.13 和管理生成器,以及 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 对象的直接属性相关的编辑后关系被清除的任何线索?

【问题讨论】:

    标签: database symfony1 doctrine yaml


    【解决方案1】:

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

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

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

    【讨论】:

    • 很棒的武士!我没有考虑过这方面,但它非常有意义,并且就像一个魅力。出于好奇,当我们说$this[] 时,它到底指的是什么?我习惯于访问类似$this->widgetSchema[] 的东西。
    • 好吧。我不完全了解Form的内部。但是,如果您使用$this['beta_meeting_list'] 而不是$this->widgetSchema['beta_meeting_list'],则会取消设置小部件和验证器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多