Search code examples
phpsymfonydoctrinedeserializationjmsserializerbundle

JMSSerializerBundle, Deserialize doesn't Relationship After Persist


Deserialization process OneToMany-ManyToOne process always get relation data sets NULL.

The Result Entity:

@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"}) 

The Answer Entity:

 @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\AnswerResult", inversedBy="answers")
 @ORM\JoinColumn(name="answer_result_id", referencedColumnName="id")
 @JMS\Type("Acme\DemoBundle\Entity\AnswerResult")

Here is the 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');

And deserialize process is assings this values...

Everything is fine, All json variables sets the correct entity properties.

$em->persist($data);
$em->flush();

the values passes to DB but relations is not... All documentations of JMSSerializationBundle. All JMS Types are defined...

But DB/Doctrine doesn't map relations...


Solution

  • I solved the same problem with merge() function :

    $entity = $em->merge($data);
    $em->persist($entity);
    $em->flush();