У меня есть две сущности: 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": "[email protected]",
"email": "[email protected]",
"name": "test",
"lang": "en-US"
}
То, что я десериализую, хорошо загружено User и UserInfo.
Но если я попытаюсь отправить что-то вроде этого:
{
"username": "[email protected]",
"email": "[email protected]",
"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+"})
таким образом, я могу исправить userInfo, следуя части Окрамиуса предложения. Может ли кто-нибудь дать мне отзыв об этом? Как вы думаете, может ли это быть хорошей/лучшей практикой для реализации достойного патча?