教义存储库与私人成员
Posted
技术标签:
【中文标题】教义存储库与私人成员【英文标题】:Doctrine Repository vs Private Members 【发布时间】:2011-03-17 23:06:00 【问题描述】:我目前正在尝试使用 Doctrine 改造数据库,但是在当前的实现中,表之间不存在很多双向关系。这使得从任何给定实体遍历对象图变得困难。
假设我希望能够从任何给定点开始并遍历整个对象图。通过阅读文档,我可以:
1) 使用双向关系字段重建数据库,以便我可以使用正确设置的关联映射进行遍历
2) 创建自定义存储库并通过传入各种实体进行获取
我很担心在任何地方都创建双向关系,但同时,创建许多自定义存储库给我一种不好的感觉。决定使用关联映射与存储库时的经验法则是什么?是否有任何性能优势?
【问题讨论】:
【参考方案1】:您仍然可以通过使用 fetch 连接构造查询来遍历实体之间的单向关联。这样,相关实体就会包含在查询返回的水合结果集中。
如果您仍然需要在逆向更深入地遍历对象图,您可以在查询中添加另一个连接,该连接引用逆向的关联实体。从性能的角度来看,单向提取连接通常比将关联转换为双向更可取,因为这样您就可以控制加载哪些相关实体以及何时加载。
还请注意,即使您确实将关联转换为双向,您实际上并没有“重建数据库”。您只会在关系的反面添加新属性。这不会向数据库本身添加任何新字段。
至于添加/使用自定义存储库,这本身不会给您的应用程序增加任何开销。自定义存储库只是存储查询和其他特定于给定实体的域逻辑的地方。事实上,在存储库类中编写自定义查询可能比尝试仅使用默认存储库方法(如 find() 和 findAll())进行查询更有效,无论您是否需要它们都会自动加载相关实体。
【讨论】:
以上是关于教义存储库与私人成员的主要内容,如果未能解决你的问题,请参考以下文章