私は2つのエンティティを持っています: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 によって送信された User を逆シリアル化しようとしています。が指定されていない場合、すべて正常に動作しUserInfo
ます。ユーザーが DB からロードされ、送信されたフィールドが更新されます。
送信する方法:
{
"username": "test@test.us",
"email": "test@test.us",
"name": "test",
"lang": "en-US"
}
私が逆シリアル化されるのは、User と 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
は更新およびシリアル化されますが、他のすべてのフィールドは DB からロードされず、すべてが に設定されnull
ます。これは私が取得したい動作ではありません。どうすればこれを修正できますか?
アップデート
適切にやりたいのであれば、単一の「ネストレベル」にパッチを当てたほうがいいと思いました。URL は次のようになります (FOSRestbundle コントローラーの注釈)。
* @Patch("/users/{username}/userInfo", requirements={"username"=".+(\.)?\w+"})
このようにして、Ocramius の提案に従って userInfoにパッチを当てることができます。誰かがこれについてフィードバックをくれますか? まともなパッチを実装するために、それが良い/ベストプラクティスになると思いますか?