swift - 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???
}
解决方案
您正在寻找反向关系。它的工作方式(来自文档):
使用链接对象属性,您可以从特定属性获取链接到给定对象的所有对象。一个
Dog
对象可以有一个名为 owner 的属性,该属性包含所有在 dogs 属性Person
中具有这个确切对象的对象。Dog
将 owner 属性设为 typeLinkingObjects
,然后指定它与Person
对象的关系。
这是Person
你的Owner
。
我建议你稍微重写一下你的代码,因为当owner
has时它更有意义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
推荐阅读
- azure - Terraform 将不同环境部署到不同 Azure 订阅的最佳实践
- sql - 加入两个表会给出重复的结果
- c# - 如何不在开源项目的 Visual Studio/C# 代码中存储 API 密钥
- ios - 滑块减速并且移动不顺畅
- node.js - Sequelize:使用 sequelize.query 进行 SQL 注入
- json - 如何在 Map 中查看这个 json 数据
- java - 如何在一定数量的迭代后重新启动循环
- javascript - 如何使用jquery在浏览器后退按钮单击事件上显示警报
- python - 要求输入并在时间到时中断的while循环
- c# - 为什么使用 forEach 的 Where 方法比单独使用 forEach 快