我在Symfony项目(API)上工作,它使用JSMSerializer,因此作为有效负载发送的每个数据都是json格式.
然后,我有两个实体,比如用户和设备.我为每一个构建了两种表单类型,虽然这两种表单之间的关系是OneToMany,但在第一个FormType中,’devices’字段是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"
}
}
}
}
但它不起作用.
最佳答案 当您尝试按持久性更新实体时,您当前具有的实例未附加到实体管理器.然后,当您持久保存实体时,它会创建另一个实体.
如果附加,则需要将id添加到实体,并合并而不是persist.
替代方案:
如果您要在列表中更新设备订单的请求,也许您应该发送一个包含新订单的数组,例如array(id => newOrder,…),并加载用户拥有的所有设备,更新他们的订单,并冲洗他们.
在此解决方案中,订单必须是实体属性,整数.如果尚未完成,那应该是