教义存储库与私人成员

Posted

技术标签:

【中文标题】教义存储库与私人成员【英文标题】:Doctrine Repository vs Private Members 【发布时间】:2011-03-17 23:06:00 【问题描述】:

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

假设我希望能够从任何给定点开始并遍历整个对象图。通过阅读文档,我可以:

1) 使用双向关系字段重建数据库,以便我可以使用正确设置的关联映射进行遍历

2) 创建自定义存储库并通过传入各种实体进行获取

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于教义存储库与私人成员的主要内容,如果未能解决你的问题,请参考以下文章

具有连接的实体和存储库中的教义可重用标准

Nexus 原始存储库与 Maven 存储库

将 github 存储库与谷歌云存储桶同步

教义:迁移:迁移。元数据存储不是最新的,请运行 sync-metadata-storage 命令修复此问题

用于存储类的静态库与动态库

将 Laravel 存储库与数据表一起使用