【发布时间】:2015-09-14 10:49:54
【问题描述】:
我正在使用 Symfony2 来构建我的页面。 当我尝试更新表单集合时(如说明书条目“How to Embed a Collection of Forms”中所述),我遇到了前端索引和后端 ArrayCollection 索引的冲突。
我有关系用户 地址 (OneToMany)。用户想要创建/更新/删除他的地址,因此他可以在 javascript 部分新地址元素的帮助下在前端添加/删除。他做了以下事情:
(1) 添加新地址(索引为:0)
(2) 添加新地址(索引为:1)并立即再次删除该地址
(3) 添加新地址(索引:2)。
当他点击保存按钮时,以下代码保存/更新用户(及其地址):
$this->em->persist($user);
$this->em->flush();
然后,例如新地址会被正确地持久化到数据库中。 现在用户想要更新地址,例如索引为 0。 当他现在单击保存按钮时,它会使用“索引 0”更新地址,但同时,它会再次将“索引 2”的地址添加到数据库(对象)中。 为了更好地理解这个问题,我画了一个小插图(手工制作,对不起我的艺术水平不好):
现在,我的对象/数据库中有两倍的“索引 1”地址。 我知道为什么会发生这种情况,这是因为第一个“索引 1”地址被映射到 ArrayCollection 元素“数字 1”,而第二个地址被映射到“数字 2”(因为前端名称“索引 2”)。 你可以说:“它只是填满地址,直到它到达后端的前端索引”.. 但是我该如何解决这个问题呢?
网站说明: 使用 ajax 请求会发生这种行为,因为如果您在单击“保存按钮”后重新加载页面,它将使用后端中的索引正确地重新索引前端中的地址。
我对处理这种情况的建议:
在服务器端单击保存后重新索引前端索引 索引。这是我的问题的明确/唯一解决方案吗?
【问题讨论】:
标签: javascript php forms symfony collections