首页 > 解决方案 > Swift Realm - 一对多过滤器查询

问题描述

class Dog: Object {
    @objc dynamic var name = ""
    let owners = List<Owner>()
}

在这里,狗可以属于多个主人。所以,假设我有一个特定的 Owner 对象。如何设置查询以获取owners列表中包含该所有者的所有狗?

func allDogsFor(owner: Owner) -> [Dog]? {
    let query = realm.objects(Owner.self).filter???
}

标签: swiftrealm

解决方案


您正在寻找反向关系。它的工作方式(来自文档):

使用链接对象属性,您可以从特定属性获取链接到给定对象的所有对象。一个Dog对象可以有一个名为 owner 的属性,该属性包含所有在 dogs 属性Person中具有这个确切对象的对象。Dog将 owner 属性设为 type LinkingObjects,然后指定它与Person对象的关系。

这是Person你的Owner

我建议你稍微重写一下你的代码,因为当ownerhas时它更有意义dogs。基本示例可能是:

final class Owner: Object {
    let dogs = List<Dog>()
}

final class Dog: Object {
    let owners = LinkingObjects(fromType: Owner.self, property: "dogs")
}

let dogsForOwner = owner.dogs
let ownersOfADog = dog.owners

推荐阅读