JMSserializer反序列化相关的Doctrine Entity

时间:2016-05-19 12:03:15

标签: php symfony doctrine-orm doctrine jms-serializer

我有这样的json:

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

]

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

当您使用doctrine应用合并时,请将country设置为“something”,但不要设置为“something 2”。所以保存后的结果是:

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

]

对于Doctrine,有两个名为Country的实体已分离。并且学说附加第一个并正确保存但不是第二个。

当您使用相同的相关实体ID合并集合时,这仅发生在关系ManyToOne上。 如果你保存国家1和国家2,那么没有重复的国家,所以保存财产。

任何解决方案?

1 个答案:

答案 0 :(得分:1)

JMS Serializer只进行对象反序列化,它不会为你处理doctrine对象。

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

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

您可以编写反序列化Listener \ Subscriber来自动为您执行自动合并