Symfony2 Doctrine2反序列化和合并实体问题

Sha*_*rop 5 json symfony doctrine-orm jms-serializer

我试图将json反序列化为实体,然后合并实体.

我相信我过去有这个工作,我会发送ID和我希望更新的任何字段.例如:

在我的DB中:

| id |  first  | last  |   city   |
|  1 |  Jimmy  | James | Seattle  |
Run Code Online (Sandbox Code Playgroud)

然后我将反序列化以下json并合并实体

$json = { "id" : 1, "city": "chicago"}
$customer = $serializer->deserialize($json, 'App\CustomerBundle\Entity\Customer', 'json');
$em->merge($customer);
Run Code Online (Sandbox Code Playgroud)

预期的结果将是:

| id |  first  | last  |   city   |
|  1 |  Jimmy  | James | Chicago  |
Run Code Online (Sandbox Code Playgroud)

但是我得到以下内容:

| id |  first  | last  |   city   |
|  1 |  null   | null  | Chicago  |
Run Code Online (Sandbox Code Playgroud)

就像我说的,我相信我在某些时候有这个工作,我不确定这是否与jms_serializeror有关em->merge.

$customer->getFirst() 返回null实体合并之前和之后

小智 5

反序列化器将您的JSON字符串转换为对象,仅此而已.它将使用您序列化的属性.如果未设置属性,则它将保持为null(或类中指定的默认值).

merge方法还会将null属性保留到数据库.

为避免这种情况,请查看以下答案:如何从@Groups包含策略更新symfony2/doctrine实体JMSSerializer反序列化实体

持久化实体后,在实体上调用EntityManager :: refresh()方法应该加载缺少的属性.

还有关系: