【发布时间】:2019-12-08 01:17:11
【问题描述】:
我有以下设置:我解析了一个结构与此类似的 api 响应(我有点过于简单化了):
{
orders: [
{
// some data
customers: [
{
// some data
addresses: [
{
id: 436456445
// some data
},
// Other addresses
]
}
]
},
{
customers: [
{
addresses: [
{
id: 436456445
// some data
}
]
}
]
}
]
}
请注意,特定地址在响应中出现了两次(相同的 id)。
我深入旅行(希望是正确的翻译)结构并制作实体。一切顺利,直到插入时的保存部分抛出重复键异常。
一个明显的解决方案是规范化结构,使地址在订单之前并重新映射周围的所有内容,但正如我所说的,我过于简单化了,实际情况有数百个结构动态映射到实体中,并有许多特殊情况人工处理。这使得“寻找”逻辑映射变得不可能。捕获异常(如此处所建议的 insert ignore on duplicate entries in Doctrine2/Symfony2)会失去我的实体经理,这意味着从头开始处理相同的数据,出现相同的问题(对此不是 100% 确定......我在这里遗漏了什么吗?)。
我需要做的是使用 mysql 在重复键上插入 [做某事] 或插入忽略(我更喜欢在重复键上插入,因为插入忽略忽略了太多东西)。知道该怎么做吗?
重要提示:我正在持久化并刷新“订单”,其余实体正在通过级联进行持久化。
【问题讨论】:
标签: php symfony doctrine-orm doctrine symfony4