我有两个实体: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 构造器发送的用户。UserInfo
如果未指定,一切正常。从数据库加载用户并更新发送的字段:
通过发送:
{
"username": "test@test.us",
"email": "test@test.us",
"name": "test",
"lang": "en-US"
}
我得到反序列化的是用户和用户信息的加载良好。
但是,如果我尝试发送这样的内容:
{
"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 的建议来修补 userInfo 。谁能给我一些反馈?你认为这可能是一个好的/最佳实践来实现一个像样的补丁吗?