相关疑难解决方法(0)

如何从序列化的JSON更新Doctrine实体?

我们正在使用Symfony2来创建API.更新记录时,我们希望JSON输入表示序列化更新的实体.JSON数据将不包含某些字段(例如,创建实体时,CreatedAt只应设置一次 - 并且永远不会更新).例如,这是一个示例JSON PUT请求:

{"id":"1","name":"anyname","description":"anydescription"}
Run Code Online (Sandbox Code Playgroud)

这是Controller上的PHP代码,它应该根据上面的JSON更新实体(我们使用的是JMS序列化器Bundle):

$supplier = $serializer->deserialize(
    $this->get('request')->getContent(),
    'WhateverEntity',
    'json'
);
Run Code Online (Sandbox Code Playgroud)

EntityManger(正确地)理解这是一个更新请求(实际上,隐式触发了SELECT查询).EntityManager还猜测(不正确)CreatedAt属性应该被NULL化 - 它应该保留前一个属性.

如何解决这个问题?

symfony doctrine-orm

8
推荐指数
3
解决办法
8007
查看次数

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

我试图将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() …

json symfony doctrine-orm jms-serializer

5
推荐指数
1
解决办法
5265
查看次数

标签 统计

doctrine-orm ×2

symfony ×2

jms-serializer ×1

json ×1