如何在 Data Mapper 中加载一对多关系?

Posted

技术标签:

【中文标题】如何在 Data Mapper 中加载一对多关系?【英文标题】:How to load a one-to-many relationship in Data Mapper? 【发布时间】:2009-12-29 23:20:37 【问题描述】:

虽然我会在 1:1 关系中选择 Ghost 模式,但我不确定这在 1:n 关系中是否足够。

例如,当我加载一个可能有一百个 Item 对象的 Order 对象时,我会首先将 NULL 分配给 items 属性。

问题是:

A) 我是否应该分配 NULL,然后在首次访问 items 属性时查找该项目的所有订单并加载所有订单?

B) 或者我应该只加载一个仅包含所有 order_id 的轻量级记录集并加载 100 个仅设置了 order_id 的 Item Ghost 对象,但其他所有内容均为 NULL - 并且一旦访问 Item 对象以获取更多详细信息从中延迟加载特定的 Item 对象数据?

【问题讨论】:

【参考方案1】:

好吧,IMO 您对延迟加载的需求在每种情况下都不同。但是,我想说的是,如果您的订单大到足以容纳 100 件商品,那么您很少会想同时加载所有 100 件商品。

我建议您按需加载每个项目,允许您加载一个“页面”项目或仅一个项目。例如,如果您需要列出所有项目,您可以加载 "page" 该列表,因为每个项目都可以按需加载,您只需加载所选页面。此外,为了提高性能,您可能希望回收这些对象,因此您可能会考虑构建 10 个 Ghost 项目,然后一次将一个“页面”加载到这 10 个项目中。

另一方面,由于项目是按需加载的,因此您可以只加载一个项目,以便仅在需要时显示该项目的完整详细信息。

【讨论】:

以上是关于如何在 Data Mapper 中加载一对多关系?的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 中加载具有关系的托管对象时的标准行为是啥?

如何管理 Core Data 中的一对多关系?

如何管理 Core Data 中的一对多关系?

如何在 Core Data 中设置一对多关系的排序?

Core Data 获取请求与 NSFetchedResultsController 的一对多关系

如何在 Laravel 中加载嵌套关系