【问题标题】:Core Data Group By and Search for Properties of one to many relationship核心数据分组和搜索一对多关系的属性
【发布时间】:2019-11-12 19:11:36
【问题描述】:

我有一个包含两个核心数据实体的应用程序:

产品和属性。

每个产品都有一组属性,这些属性在模型中是一对多的关系。

我想做几件事:

  • 产品具有brand_id 和品牌名称。我想获取所有品牌名称的列表,可能通过按品牌 ID 对所有产品进行分组。

  • 然后我想从与该品牌关联的所有产品中获取所有唯一密钥。因此,选择具有特定品牌 ID 的所有产品,然后选择与任何产品关联的所有属性,然后按其键对它们进行分组。

  • 之后,我想选择一个特定的键值对进行搜索,并获取与该键值对匹配的属性关联的所有产品。

对于核心数据,这是否可能实现?我一直在寻找高低,但似乎这个问题比大多数人必须做的要复杂一些。

【问题讨论】:

  • 为什么没有Brand 实体?
  • 我同意@Wain,这听起来更像是一个建模问题。您应该有一个与您的产品关联的 Brand 对象。 Core Data 是一个对象图,而不是数据库。用数据库手套处理它会导致难以解决这样的问题,这反过来会产生性能不佳的代码。

标签: ios core-data


【解决方案1】:

对于前两个问题,我建议创建另一个品牌实体并在您的模型中建立适当的关系。这肯定会让事情变得更容易。

确保您将品牌与产品的关系反转 - 这将自动为您提供前 2 个问题的答案。

您可以使用以下方法在核心数据中搜索不同(唯一)值:

[request setPropertiesToFetch:[NSArray arrayWithObject:@"distinctProperty"]];

要查找属性匹配键、值对的产品,您应该在获取产品实体时使用此 NSPredicate:

[NSPredicate predicateWithFormat:@"(SUBQUERY(properties, $property, $property.key == %@ AND $property.value == %@).@count > 0)", @"keySearch", @"valueSearch"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2013-10-27
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2013-11-02
    相关资源
    最近更新 更多