0

我有两个实体:UserUserInfo

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 。谁能给我一些反馈?你认为这可能是一个好的/最佳实践来实现一个像样的补丁吗?

4

1 回答 1

0

JMSSerializer 的编写不是为了让您的实体尽可能与数据库相似。您可以进行简单的序列化或反序列化。有一些代码示例,其中用户创建了一些工厂来实现您的目标。

您是否尝试将反序列化实体合并到 EntityManager 中?它应该符合您的需求。

于 2016-09-26T19:48:11.753 回答