JMSSerializerBundle,持久化后反序列化没有关系
JMSSerializerBundle, Deserialize doesn't Relationship After Persist
反序列化过程 OneToMany-ManyToOne 过程总是得到关系数据集 NULL。
结果实体:
@ORM\OneToMany(targetEntity="\Acme\DemoBundle\Entity\AnswerContent", mappedBy="answerResult", cascade={"persist", "remove"}, orphanRemoval=true)
@JMS\Type("ArrayCollection<Acme\DemoBundle\Entity\AnswerContent>")
@JMS\Groups({"survey_answer_fetching"})
答案实体:
@ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\AnswerResult", inversedBy="answers")
@ORM\JoinColumn(name="answer_result_id", referencedColumnName="id")
@JMS\Type("Acme\DemoBundle\Entity\AnswerResult")
这是json:
{"results":
[{"answers":[
{"choices":[{"fieldId":1}],"value":"","questionId":45},
{"choices":[{"fieldId":1}],"value":"","questionId":67}],
"someId":9
}],
"personId":18}
$serializer = $this->get('jms_serializer');
$data = $serializer->deserialize($json['json'], 'Acme\DemoBundle\Entity\AnswerResult', 'json');
反序列化过程正在评估这个值...
一切正常,所有 json 变量都设置了正确的实体属性。
$em->persist($data);
$em->flush();
值传递给数据库但关系不是... JMSSerializationBundle 的所有文档。所有 JMS 类型都已定义...
但是 DB/Doctrine 没有映射关系...
我用 merge() 函数解决了同样的问题:
$entity = $em->merge($data);
$em->persist($entity);
$em->flush();
反序列化过程 OneToMany-ManyToOne 过程总是得到关系数据集 NULL。
结果实体:
@ORM\OneToMany(targetEntity="\Acme\DemoBundle\Entity\AnswerContent", mappedBy="answerResult", cascade={"persist", "remove"}, orphanRemoval=true)
@JMS\Type("ArrayCollection<Acme\DemoBundle\Entity\AnswerContent>")
@JMS\Groups({"survey_answer_fetching"})
答案实体:
@ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\AnswerResult", inversedBy="answers")
@ORM\JoinColumn(name="answer_result_id", referencedColumnName="id")
@JMS\Type("Acme\DemoBundle\Entity\AnswerResult")
这是json:
{"results":
[{"answers":[
{"choices":[{"fieldId":1}],"value":"","questionId":45},
{"choices":[{"fieldId":1}],"value":"","questionId":67}],
"someId":9
}],
"personId":18}
$serializer = $this->get('jms_serializer');
$data = $serializer->deserialize($json['json'], 'Acme\DemoBundle\Entity\AnswerResult', 'json');
反序列化过程正在评估这个值...
一切正常,所有 json 变量都设置了正确的实体属性。
$em->persist($data);
$em->flush();
值传递给数据库但关系不是... JMSSerializationBundle 的所有文档。所有 JMS 类型都已定义...
但是 DB/Doctrine 没有映射关系...
我用 merge() 函数解决了同样的问题:
$entity = $em->merge($data);
$em->persist($entity);
$em->flush();