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

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

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

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

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

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

【问题讨论】:

    标签: php orm doctrine datamapper


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 2020-08-11
      • 2020-03-22
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多