Доктрина / Symfony теряют отношения M: N при сохранении - PullRequest
1 голос
/ 05 ноября 2011

Я предполагаю, что у меня проблема с настройкой моего Doctrine schema.yml, но я не вижу здесь правильного ответа.

У меня есть две таблицы, BetaMeeting и ProjectTester, которые формируют отношение многие ко многим через BetaMeetingAttendee.Все работает нормально, и я могу, например, отредактировать бета-встречу, включив в нее несколько тестировщиков проектов, и все отношения сохраняются правильно.Однако, когда я редактирую тестировщика проекта, который уже имеет отношения с бета-встречей, при сохранении отношения M: N теряются.При использовании Symfony 1.4.13 и генератора admin, 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?

1 Ответ

2 голосов
/ 05 ноября 2011

Если у вас есть поле, определенное в форме, но вы исключили его из генератора. Это похоже на отправку пустого поля и, следовательно, очищает отношения.

Вы должны сбросить это поле в классе Form.class, чтобы поле сохранило текущие значения.

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