#database #symfony1 #doctrine #yaml
#База данных #symfony1 #доктрина #yaml
Вопрос:
Я предполагаю, что это проблема конфигурации с моей Doctrine schema.yml, но я не вижу, как найти правильный ответ здесь.
У меня есть две таблицы, BetaMeeting и ProjectTester, которые формируют отношения «многие ко многим» через BetaMeetingAttendee. Все работает нормально, и я могу отредактировать бета-собрание, например, чтобы включить несколько тестировщиков проекта, и все отношения будут сохранены правильно. Однако, когда я редактирую тестер проекта, у которого уже есть существующие отношения с бета-собранием (встречами), при сохранении M: N отношения теряются. При использовании Symfony 1.4.13 и генератора администратора, Doctrine 1.2 и страницы редактирования для тестировщика проекта не упоминаются отношения «многие ко многим», нет скрытых полей и т.д. Может ли это быть причиной того, что данных там нет, поэтому Doctrine удаляет их? Я не думал, что это будет необходимо включить.
Моя схема.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:
Если у вас есть поле, определенное в форме, но вы исключили его из генератора.yml это похоже на отправку пустого поля, и поэтому оно очищает отношения.
Вы должны отменить это поле в Form.class таким образом, поле сохраняет текущие значения.
public function configure()
{
unset($this['beta_meeting_list']); // or the correct value
}
Комментарии:
1. Фантастический самура! Я не думал об этом аспекте, но это имеет смысл и работает как шарм. Из любопытства, на что именно это ссылается, когда мы говорим
$this[]
? Я привык обращаться к вещам, более похожим$this->widgetSchema[]
.2. Ну. Я точно не знаю внутренностей формы. Но если вы сделаете это
$this['beta_meeting_list']
вместо$this->widgetSchema['beta_meeting_list']
, вы отключите как виджет, так и средство проверки.