我有两个实体:User
和UserInfo
:
class User
{
...
/**
* @ORM\OneToOne(targetEntity="UserInfo")
* @ORM\JoinColumn(name="userinfo_id", referencedColumnName="id_user")
* @Serializer\Groups({"o", "i-self-editUser"})
*/
private $userInfo;
...
}
class UserInfo
{
/**
* @var integer
*
* @ORM\Column(name="id_user", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="SEQUENCE")
* @ORM\SequenceGenerator(sequenceName="users_id_user_seq", allocationSize=1, initialValue=1)
*/
private $idUser;
...
}
我试图通过JMSSerializer及其Doctrine Contructor对用户进行反序列化。如果未指定UserInfo
,一切正常。用户从数据库加载,发送的字段更新:
发送:
{
"username": "test@test.us",
"email": "test@test.us",
"name": "test",
"lang": "en-US"
}
我反序列化的是User's和UserInfo的加载良好。
但是如果我尝试发送这样的东西:
{
"username": "test@test.us",
"email": "test@test.us",
"name": "test",
"lang": "en-US"
"user_info": {
"short_date_format": "Y-m-dd"
}
}
short_date_format
已更新并序列化,但不会从数据库加载所有其他字段,将所有字段设置为null
。这不是我想要的行为。我该如何解决这个问题?
更新
我认为我最好修补单个"嵌套级别"如果我想做得好URL可能类似于此(FOSRestbundle控制器的注释):
* @Patch("/users/{username}/userInfo", requirements={"username"=".+(\.)?\w+"})
这样,我可以按照Ocramius' piece of suggestion修补userInfo。谁能给我一些关于此的反馈?你认为为了实现一个合适的补丁可能是一个好的/最好的做法吗?
答案 0 :(得分:0)
JMSSerializer不是为了让您的实体尽可能与数据库保持相似而编写的。您可以进行简单的序列化或反序列化。有一些代码示例,用户可以创建一些工厂来实现您的目标。
您是否尝试将反序列化的实体合并到EntityManager中?它应该满足你的需求。