public function onSerializerPreDeserialize(PreDeserializeEvent $e) { $className = $e->getType(); $className = $className['name']; /** Handle ArrayCollection or array JMS type. */ if ($className == "ArrayCollection" || $className == "array") { $className = $e->getType(); $className = $className['params'][0]['name']; } $classMetadata = $e->getContext()->getMetadataFactory()->getMetadataForClass($className); /** @var PropertyMetadata $propertyMetadata */ foreach ($classMetadata->propertyMetadata as $propertyMetadata) { if ($propertyMetadata->reflection === null) { continue; } /** @var JoinColumn $joinColumnAnnotation */ $joinColumnAnnotation = $this->reader->getPropertyAnnotation($propertyMetadata->reflection, 'Doctrine\\ORM\\Mapping\\JoinColumn'); if ($joinColumnAnnotation !== null) { if (array_key_exists($joinColumnAnnotation->name, $e->getData())) { $idValue = $e->getData(); $idValue = $idValue[$joinColumnAnnotation->name]; if ($idValue !== null) { $e->setData($e->getData() + array($propertyMetadata->name => array('id' => $idValue))); } else { $e->setData($e->getData() + array($propertyMetadata->name => null)); } } } } }