【问题标题】:Need to convert SQL Query to Coredata Format需要将 SQL 查询转换为 Coredata 格式
【发布时间】:2015-08-01 10:33:17
【问题描述】:

SQL 查询

select * from zchildren where zparent = 3586 OR zparent in (Select zid from zchildren where zparent = 3586)

我用$SUBQUERY 尝试了几个案例,但我仍然没有取得任何成功。那么我该如何实现呢?

更新

我的表名是 Children,它的 Parent 包含相同表 ID 的 ID,它现在是一个 反向关系想要父级为 '3586' 的所有子级及其所有子子级

更新2

我正在附上屏幕截图

现在还有几分

  1. 表组与子项具有一对多关系
  2. Table Children 有两个关系
  3. 第一个与组一对一相反
  4. 与自身相反的第二个孩子关系,称为自反

更新问题

现在假设我有一个要从 Children 表中搜索的查询,其中标题为 'Medical' AND Parent 为 '3586' 现在这个 '3586' 是来自表 Group 的父 ID,我可以轻松地断言它。

问题

它给了我父母 '3586' 的孩子,但我也想在这个父母 ID 的反身的子孩子的标题中搜索,表示来自父母的孩子的子孩子'3586'

我真的需要这个解决方案。如果有人对此问题不清楚,我仍然可以更新我的问题。

【问题讨论】:

  • 你从错误的角度来处理这个问题。您的实体是如何定义的,它们之间的关系是什么以及您想要实现的目标是什么?
  • @MartinR 我已经更新了我的答案
  • 请显示您的托管对象子类定义。
  • @MartinR 我用屏幕截图更新了我的问题,还提供了更多信息。够好吗?

标签: sql swift core-data nspredicate


【解决方案1】:

在处理一些复杂的 Core Data 问题时,您确实必须更加准确。你的代码和变量名很草率而且有错误。

在您的 SQL 查询中,您有一个属性 parent(或“zparent”),但在 Core Data 模型中,它成为一个属性而不是关系。 (你可能在考虑建模 id 吗?那说明你还停留在关系数据库的思维中,还没有完全掌握对象图的概念。忘记 id 而是考虑关系。)

您需要与children 建立反向关系,因此这不能是相同的关系。将实体称为“孩子”会令人困惑,因为 1)您将复数用于单数对象,并且 2)您将父母和孩子都称为“孩子”。您还将“Children”拼写为“Childran”,可能会导致各种错误。

相反,让我建议实体名称Person。一个人可以有一个或多个parents(或者只有一个?)和一个或多个children,两者都是Person类型,从而产生多对多关系:

Person - parents <<----------------->> children - Person

如果一个人只能有一个父母,那当然是多对一关系。

Person - parent <------------------->> children - Person

然后您可以使用idNumber 3586 获取Person(请注意,使用id 可能也是一个坏主意,因为它在某些情况下是保留字)。然后,您可以非常简洁地访问该人的孩子:

person.children

这就是它的全部内容。

【讨论】:

  • 首先感谢伙伴花时间注意到我的问题。第二个关于字段名称 Id 来自 json 所以我在我的另一个示例中使用它来进行测试,现在我知道我可以从 3586 获取 person.children 这是真的,但我也想在 sub children 中搜索。所以让我们说如果我的父母 id 3586 我可以得到它的孩子,但我想在子孩子中搜索.. 那我该怎么做呢?
  • 你知道怎么写循环吗?
  • 是的,我知道使用递归循环我可以实现这一点,但使用 NSPredicate 是否有可能?
  • 如果您要按照@Mundi 的建议正确建模数据,那么您可以将谓词设置为:@"parent.uid == %@ || parent.parent.uid == %@", @3586, @3586 - 显然,该谓词的长度/复杂性取决于您想要多少级别的孩子搜索
  • @Paul.s 我不知道有多少长度,它将是它的递归和最多 n 个子孩子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多