php - 反序列化对应于父实体引用的 JSON 键 (Symfony Serializer)
问题描述
假设我有一个简单的 Post 实体,具有 $author ManyToOne 关系:
Class Post {
/**
* @ORM\ManyToOne(targetEntity=Author::class, inversedBy="posts")
* @ORM\JoinColumn(nullable=false)
*/
private $author;
/**
* @ORM\Column(type="string", length=255)
*/
private $title;
...
}
然后是这样的控制器功能:
public function create(Request $request, EntityManagerInterface $em, SerializerInterface $serializer): Response
{
$data = $request->getContent();
$post = $serializer->deserialize($data, Post::class, 'json');
$em->persist($post);
$em->flush();
}
JSON 格式 $data 如下所示:
{
"author": { "id": 10 },
"title": "My Title",
...
}
有没有办法让序列化器将作者 ['id'] 反序列化为它的实体引用?
我读到这是Symfony 的 PropertyInfo 组件在启用时应该做的事情。但即使启用了 PropertyInfo,persist 操作仍在创建新作者而不是引用现有作者(Doctrine 生成新作者行而不是设置帖子行的 author_id)
解决方案
也许通过添加cascade={"persist"}
$author 属性注释?或强制设置器`
$post = $serializer->deserialize($data, Post::class, 'json');
$post->setAuthor($em->getRepository(Author::class)->findOneBy([])); `
推荐阅读
- python - 使用opencv计算特定颜色像素的图像识别
- curl - curl:加载共享库时出错:libssl.so.1.0.2:无法打开共享对象文件:没有这样的文件或目录
- javascript - 为什么 if 语句声称它是假的,而 console.log() 说它是真的
- database - 在 plesk 中导入 .bak 文件失败
- mapbox - 调整地图的不透明度
- javascript - javascript 在页面滚动时被激活
- python - 根据标题将列表附加到现有 csv
- postgresql - 迁移 postgresql 架构 AWS RDS
- ios - 尝试使用分段视图导航视图控制器
- html - 选择列表中的下拉子菜单