Próbuję zaktualizować podmioty symfony2/doktryny przy użyciu JMSSerializer z zasadą @ExclusionPolicy: None @Groups Inclusion.jak zaktualizować jednostkę symfony2/doktrynę z zasady włączania @Grouper JMSSerializer z postaci szeregowej
* @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;
}
referencyjny: http://jmsyst.com/libs/serializer/master/reference/annotations
wynika z następującego zapisu:
Foo (id:1, name:'bar', flagged:false ,created_by:123)
są szeregowane za pomocą integracji grupy, aby uniknąć szeregowania informacji nie potrzeba (stowarzyszenia, plamy, itp ..), więc gdy chcę zaktualizować jednostkę, deserializuję tylko zaktualizowane pola jednostki z JSON.
$foo->setFlagged(true);
$data = $serializer->serialize($foo, 'json', SerializationContext::create()->setGroups(array("flag")));
result:
{id:1,flagged:true}
który po przejściu z powrotem do aplikacji deserializes do podmiotu
$foo = $serializer->deserialize($jsonFoo,'Foo','json');
result:
Foo (id:1, name:null, flagged:true, created_by:null)
Problem jest, gdy próbuję połączyć jednostkę z powrotem do kierownika jednostki doktryna:
$foo = $em->merge($foo);
$em->persist($foo);
$em->flush();
The Wynikowy foo próbuje zaktualizować wykluczone właściwości (name, created_by) o wartości null.
Jak mogę powiedzieć, że JMSSerializer lub Doctrine Entity Manager łączą, że nie chcę nadpisywać istniejących właściwości null?
jedyną możliwą opcją znalezioną na http://stackoverflow.com/questions/8726611/how-to-update-a-doctrine-entity-from-a-serialized-json, która oznacza ominięcie JMSSerializer, deserializację i sprawdzenie/aktualizację encja ręcznie (w tym przypadku przykład pomija settery). – Heyflynn