反序列化与父实体引用(Symfony Serializer)相对应的JSON键



假设我有一个简单的Post实体,具有$author ManyToOne关系:

Class Post {
/**
* @ORMManyToOne(targetEntity=Author::class, inversedBy="posts")
* @ORMJoinColumn(nullable=false)
*/
private $author;
/**
* @ORMColumn(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,持久化操作仍然是创建一个新的Author,而不是引用一个现有的Author (Doctrine生成一个新的Author行,而不是设置post行的author_id)

也许通过在$author属性注释上添加cascade={"persist"}?或强制setter '

$post = $serializer->deserialize($data, post::class, 'json');

post→美元setAuthor (em→getRepository(作者::类)→findOneBy ([]));'

最新更新