Symfony2将XML数据反规范化为具有关系的条令实体



我使用的是Symfony2和Doctrine 2.0。我正在尝试从XML提要中读取数据,并将其映射到数据库中的新实体或现有实体。当XML提要中的数据发生更改时,我需要更新现有的实体,但当添加数据时,我应该创建新的实体。

在我的实体类中,我使用以下非规范化方法将XML数据映射到实体的属性:

function denormalize(SerializerInterface $serializer, $data, $format = null) 

(在Symfony\Component\Serializer\Serializer中定义,在我的实体类中调用(

该方法的文档指出,"重要的是要理解反规范化((调用应该递归地反规范化实现器的所有子对象。"这就是我正在尝试做的。然而,实体不应该知道EntityManager,所以我如何在反规范化方法内部检查相关/子实体是否已经存在?

谨致问候,Matthew

在实体中(据我所知,在控制器外部(调用EntityManager确实是个坏主意。

我从来没有遇到过这个问题,但如果我是你,我会尝试在你的一个控制器中取消规范化,或者如果它真的让你感到困扰,在你在控制器中调用的服务中,并将EntityManager提供给它(在这里,最好在控制器本身中进行,或者简单地将你的对象发送到服务,这样它就可以将xml"取消规范化"为对象(。

最好的方法是编写一个无论给定实体如何都能工作的控制器。

希望能有所帮助!

我认为我的问题在于我的方法,而不是我的代码!!

最初,每次我发现XML中表示的实体时,我都会检查(使用EntityManager(,看看它是新的还是现有的,然后再对其进行反规范化。我之所以走这条路,是因为XML中存在重复,我担心在EntityManager中创建重复的实体。作弊查看一个实体是否已经存在意味着我可以更新现有的实体,而不是创建一个重复的实体。现在,使用我的新方法,每当我找到用XML表示的实体时,我都会将其去规范化为一个新实体。当然,这会在EntityManager中创建重复,就像在XML中一样,但这可以稍后处理,希望。。!

到目前为止,这被证明是一个更好的解决方案,尽管我在尝试使用$em->merge((合并EntityManager中的重复实体时遇到了一些问题;和cascade={"persistent","merge"}。我在这里发布了一个关于这一点的新问题:条令2.1-ManyToMany级联合并后失去的关系-Symfony2

Matthew

最新更新