2011-03-17 26 views
2

我目前正在尝试使用Doctrine来改造数据库,但在当前的实现中,表格之间并不存在许多双向关系。这使得遍历任何给定实体的对象图很困难。Doctrine Repository vs Private Members

比方说,我希望能够在任何给定点开始并遍历整个对象图。从阅读的文档,我可以:

1)重建具有双向关系领域的数据库,这样我可以遍历使用正确建立关联映射

2)创建自定义存储库,并通过将各种取实体

我担心在任何地方都会创建双向关系,但同时创建许多自定义存储库会给我一种不好的感觉。决定使用关联映射与存储库时,经验法则是什么?有没有性能方面的优势?

回答

0

通过使用fetch连接构造查询,您仍然可以遍历实体之间的单向关联。这样,相关的实体就包含在查询返回的水合结果集中。

如果您仍然需要在反面更深入地遍历对象图,则可以在查询中添加另一个引用相关联的实体的联接。从性能的角度来看,单向提取连接通常更适合将关联转换为双向,因为这样可以控制哪些相关实体被加载以及何时加载。

另请注意,即使您将关联转换为双向关系,您实际上也不是“重建数据库”。你只会在关系的反面添加新的属性。这不会为数据库本身添加任何新字段。

至于添加/使用自定义存储库,这不会增加任何开销到您的应用程序本身。自定义存储库只是存储特定实体特定的查询和其他域逻辑的地方。实际上,在你的存储库类中编码自定义查询可能比试图仅使用诸如find()和findAll()之类的默认存储库方法进行查询更有效,无论你是否需要它们,都会自动加载相关实体。