Я однажды сталкивался с той же проблемой, так что это мое решение проблемы.Symfony не очень умен в таких ситуациях, поэтому вам нужно немного помочь.Модель, которую вы описываете, идеально подходит для интерпретации проблемы с помощью реляционной модели:
user:
id:
email: { type: varchar, size: 255, required: true }
... # etc.
partner:
user_id: { type: integer, foreignTable: user, foreignReference: id }
Дело в том, что Symfony действительно упрощает ее, а когда Propel генерирует формы и анализирует формы для передачи данных для сохранения данных, он интерпретирует user_idполе, как если бы это было какое-то нормальное поле (не однозначным).
Так что, если вы действительно хотите, чтобы этот множественный выбор, созданный Symfony, и вся логика за ним были сгенерированы для вас, вам понадобитсясоздать отношения многих ко многим между этими двумя классами.Схема должна выглядеть примерно так:
user:
id:
email: { type: varchar, size: 255, required: true }
... # etc.
partner:
user_id: { type: integer, foreignTable: user, foreignReference: id }
user_partner:
user_id: { type: integer , foreignTable: user, foreignReference: id, primaryKey: true}
partner_id: { type: integer , foreignTable: partner, foreignReference: id, primaryKey: true}
Таким образом у вас будет виджет partner_list в пользовательской форме, а также виджет user_list в партнерской форме.Я всегда отключаю тот, который мне не нужен, и действительно работает как шарм.
Другие решения, которые лучше всего подходят для реализации вашей модели, немного сложнее, потому что вам нужно изменить пользовательскую форму и добавитьМногоэлементный виджет partner_ids затем модифицирует метод doSave, чтобы иметь возможность обрабатывать логику сохранения множественного выбора (создавать экземпляры, связывать их с пользователем и сохранять их, а также удалять невыбранные).