Ich versuche Symfony2/Doktrin-Entitäten mit JMSSerializer mit einer @ExclusionPolicy: None @Groups Inclusion Policy zu aktualisieren.wie man symfony2/doctrine entity von einer @Groups-Einschluss-Richtlinie aktualisiert JMSSerializer deserialized entity
* @Serializer\ExclusionPolicy("none")
*/
class Foo
{
/**
* @Serializer\Groups({"flag","edit"})
*/
protected $id;
/**
* @Serializer\Groups({"edit"})
*/
protected $name;
/**
* @Serializer\Groups({"flag"})
*/
protected $flag;
/**
* @Serializer\Exclude()
*/
protected $createdBy;
}
Referenz: http://jmsyst.com/libs/serializer/master/reference/annotations
das Ergebnis für den folgenden Datensatz:
Foo (id:1, name:'bar', flagged:false ,created_by:123)
serialisiert wird mit Aufnahme-Gruppe Serialisierung Informationen zu vermeiden, brauche ich nicht (Verbände, Blobs, etc ..) Wenn ich eine Entity aktualisieren möchte, deserialiere ich nur die aktualisierten Felder der Entity aus dem JSON.
$foo->setFlagged(true);
$data = $serializer->serialize($foo, 'json', SerializationContext::create()->setGroups(array("flag")));
result:
{id:1,flagged:true}
die, wenn sie an die Anwendung übergeben zurück deserialisiert in die Einheit
$foo = $serializer->deserialize($jsonFoo,'Foo','json');
result:
Foo (id:1, name:null, flagged:true, created_by:null)
Das Problem ist, wenn ich versuche, die Einheit wieder in die Lehre Entity Manager zu fusionieren:
$foo = $em->merge($foo);
$em->persist($foo);
$em->flush();
Die resulting foo versucht, die ausgeschlossenen Eigenschaften (name, created_by) mit null zu aktualisieren.
Wie teile ich JMSSerializer oder Doctrine Entity Managers merge mit, dass ich vorhandene Eigenschaften nicht mit null überschreiben möchte?
die einzige Option, die ich fo http://stackoverflow.com/questions/8726611/how-to-update-a-doctrine-entity-from-a-serialized-json gefunden habe, was bedeutet, JMSSerializers zu umgehen und zu deserialisieren und zu überprüfen/zu aktualisieren die Entität manuell (in diesem Fall die Setter umgehen). – Heyflynn