JMSserializer 反序列化相关 Doctrine 实体

问题描述 投票:0回答:2

我有这样的json:

"relatedCollection": [
  {
     id:1,
     name: "something",
     country: {
           id:1
          }
  },
    {
     id:2,
     name: "something 2",
     country: {
           id:1
          }
  }

]

数据库中存在两个具有共同国家/地区的相关项目。如果我使用 JMSserializer 反序列化,并且 它会创建两个不同的 COUNTRY 实体实例

当您应用与学说合并时,请将国家/地区正确设置为“某事”,但不要设置为“某事2”。所以保存后的结果是:

"relatedCollection": [
  {
     id:1,
     name: "something",
     country: {
           id:1
          }
  },
    {
     id:2,
     name: "something 2",
     country: null
  }

]

对于 Doctrine,有两个不同的实体,称为独立的国家。教义附加第一个并正确保存它,但不附加第二个。

仅当您合并具有相同相关实体 id 的集合时,这种情况才会发生在 ManyToOne 关系中。 如果你保存国家1和国家2,就没有重复的国家,所以保存财产。

有什么解决办法吗?

php symfony doctrine-orm doctrine jms-serializer
2个回答
1
投票

JMS Serializer 只是进行对象反序列化,它不会为您处理原则对象。

你必须进行任何类型的合并,例如级联合并

http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/working-with-associations.html#transitive-persistence-cascade-operations

你可以写一个反序列化Listener\Subscriber来自动帮你做自动合并


0
投票

对于后来(2023 年以上)来这里的人来说,@jeandonaldroselin 的这个详细答案 效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.