【问题标题】:filter objects with two nested levels in a query with Realm在使用 Realm 的查询中过滤具有两个嵌套级别的对象
【发布时间】:2017-11-14 11:48:22
【问题描述】:

我有一个这样的模型:

class CalendarEvent: Object, Mappable {


dynamic var exId = ""
@objc dynamic var title:String = ""
@objc dynamic var desc:String = ""
dynamic var fullDate = Date()
dynamic var date = ""
dynamic var time = ""
dynamic var location = ""
dynamic var subcategory:Subcategory?
dynamic var update = false
var participants = List<Participant>()
}

class Category:Object, Mappable{
dynamic var exId = ""
@objc dynamic var name="";
var subcategories = List<Subcategory>()
}

class Subcategory:Object, Mappable{
dynamic var exId = ""
dynamic var name = ""
let category = LinkingObjects(fromType: Category.self, property: "subcategories")
dynamic var active:Bool = true
dynamic var update = false
}

我需要知道哪些 CalendarEvents 来自一个类别,什么时候来自一个子类别我可以做到:

var results = realm.objects(CalendarEvent.self)
results = results.filter("ANY subcategory.exId == %@", subcategory!.exId)

但是当我需要获取按类别过滤的 CalendarEvents 时,我不知道该怎么做。我照顾了解决方案,但没有找到任何地方。请帮忙!

【问题讨论】:

  • 用例有点不清楚; Category 和 Subcategory 之间存在关系,并且 Subcategory 与 Category 之间存在反向关系。但是在 CalendarEvent 和 Subcategory 之间存在单向关系,即 CalendarEvent 可以有一个 Subcategory。为什么?如果您希望一个类别有多个日历事件,为什么不在 Category 和 CalendarEvent 之间建立一对多关系,或者在 SubCategory 和 CalendarEvent 之间建立一对一关系。
  • 例如类别可以是:会议、特别活动...。会议子类别的示例可以是财务、行政...。而 calendarEvent 的示例是发生的财务类型会议3 月 19 日凌晨 12:00。

标签: ios swift swift3 realm nested-queries


【解决方案1】:

为了记录,我找到了解决方案。这很容易,您需要细分查询并链接,然后使用“IN”。例如:

let resultsSubcategory = realm.objects(Subcategory.self).filter("ANY category.exId == %@", category?.exId)
        results = results.filter("subcategory IN %@", resultsSubcategory) 

【讨论】:

  • 我删除了我的答案,因为我误解了这个问题。不清楚对象上的 exId 是否重复,这就是您想要进行过滤的方式。现在去吧,给你一个赞成票。
  • 是的 exId 是来自服务器(外部)的每个 id 的命名法。无论如何,感谢您的关注
猜你喜欢
  • 2021-11-21
  • 2012-02-21
  • 1970-01-01
  • 2021-09-02
  • 2011-12-24
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 2016-05-05
相关资源
最近更新 更多