Я использую Symfony2 для создания моей страницы. Когда я пытаюсь обновить коллекцию форм (как описано в записи поваренной книги "" Как встроить коллекцию форм"), я получаю столкновение индексов интерфейса и индексов ArrayCollection в бэкэнде.
У меня есть отношение User ↔ Address (OneToMany). Пользователь хочет создать/обновить/удалить свои адреса, поэтому он может добавлять/удалять в интерфейсе с помощью элементов нового адреса javascript. Он делает следующее:
(1) Добавляет новый адрес (имеет индекс: 0)
(2) Добавляет новый адрес (имеет индекс: 1) и мгновенно удаляет этот адрес снова
(3) Добавляет новый адрес (имеет индекс: 2).
Когда он нажимает кнопку сохранения, следующий код сохраняет/обновляет пользователя (и его адреса):
$this->em->persist($user);
$this->em->flush();
Новые адреса, например, затем корректно сохраняются в базе данных. Теперь пользователь хочет обновить адрес, например. с индексом 0. Когда он нажимает на кнопку сохранения, он обновляет адрес с помощью "index 0", но в то же время он снова добавляет адрес с "индексом 2" в базу данных (объект). Чтобы лучше понять проблему, я нарисовал небольшую иллюстрацию (ручная работа, извините за мои плохие навыки искусства):
Теперь у меня есть два раза адрес с "индексом 1" в моем объекте/базе данных. Я знаю, почему это происходит, потому что первый адрес "index 1" сопоставляется с элементом ArrayCollection "номер 1", а второй отображается на "номер 2" (из-за имени интерфейса "index 2" ). Вы можете сказать: "он просто заполняет адреса, пока не достигнет индекса интерфейса в бэкэнд". Но как я могу исправить это поведение?
Примечание по сайту: Такое поведение возникает с использованием аякс-запросов, потому что если вы перезагрузите страницу после нажатия кнопки "Сохранить", она правильно вернет адреса в интерфейсе с индексами в бэкэнд.
Мое предложение справиться с этой ситуацией:
Повторное индексирование индексов интерфейса после нажатия кнопки "Сохранить" на стороне сервера индексов. Является ли это ясным/единственным решением для моей проблемы?