我在Symfony项目(API)上工作,它使用JSMSerializer,因此作为有效负载发送的每个数据都是json格式。
然后,我有两个实体,比如用户和设备。我为每一个构建了两种表单类型,虽然这两种表单之间的关系是OneToMany,但在第一种FormType中,' devices' field是DeviceType表单的集合。
添加时,很简单,你必须发布这样的东西
{
"user": {
"name": "John",
"devices": [
{
"os": "Android",
"color": "red"
},
{
"os": "Android",
"color": "blue"
}
]
}
}
Everithing工作得很好。实体持久存储在db。
中更新时,可以使用一些修改过的数据以相同的顺序发送相同的有效负载,就像这样
{
"user": {
"name": "John",
"devices": [
{
"os": "Android",
"color": "redish"
},
{
"os": "Android",
"color": "blueish"
}
]
}
}
和Symfony发挥其魔力。
我的问题是更新更改时发送的设备顺序。它会引发各种问题。
我的问题是如何在集合中发送元素的ID,以便symfony / doctrine映射它并知道谁和如何更新?
我想到了这样的事情
{
"user": {
"name": "John",
"devices": {
"2": {
"os": "Android",
"color": "blueish"
},
"1": {
"os": "Android",
"color": "redish"
}
}
}
}
但它不起作用。
答案 0 :(得分:2)
当您尝试通过persist更新实体时,您当前的实例未附加到实体管理器。然后,当您持久保存实体时,它会创建另一个实体。
如果附加,则需要将ID添加到实体,合并而不是保留。
替代解决方案:
如果您要求更新列表中的设备订单,也许您应该发送一个包含新订单的数组,例如array(id => newOrder,...),并加载所有设备用户,更新他们的订单,并冲洗它们。
在此解决方案中,订单必须是实体属性,整数。如果尚未完成,则应为