Realm Swift iOS 中的子查询/关系



我有两个对象:

Account: Object {
dynamic var id: String?
dynamic var name: String?
dynamic var valid: String?
}
Transaction: Object {
dynamic var id: String?
dynamic var desc: String?
dynamic var accountId: String?
}

我正在尝试做的是以某种方式链接这两个对象,以便当我对交易"表"进行查询时,我可以找出哪些交易来自valid帐户。

我试过将它们链接到let transactions = LinkingObjects(fromType: Transaction.self, property: "fromAccount")Account对象中,并在Transaction对象中执行反向操作。我得到的最佳结果是空列表或空记录。

我想下一个问题是,有没有办法做我正在尝试的事情?我也研究了子查询,但没有任何运气(文档似乎非常薄,用于子查询)。

我过去所做的是,每当创建新交易时,它都会获取完整的帐户对象(使用accountId)并将其存储在该记录中,但我觉得一定有更好的方法。肯定。

有许多解决方案,但您的链接对象是一个不错的选择。这实际上将归结为您要运行哪种查询。

因此,让我们从一个超级简单的例子开始,该示例允许您查询任何具有有效为"true"的父帐户的交易 - 这可以解决您的问题。

class Account: Object {
@objc dynamic var id: String?
@objc dynamic var name: String?
@objc dynamic var valid: String?
}
class Transaction: Object {
@objc dynamic var id: String?
@objc dynamic var desc: String?
@objc dynamic var accountId: String?
@objc dynamic var parent_account: Account?
}

然后创建几个对象

let a0 = Account()
a0.name = "account 0"
a0.valid = "true"
let a1 = Account()
a1.name = "account 1"
a1.valid = "false"
let t0 = Transaction()
t0.desc = "trans 0"
let t1 = Transaction()
t1.desc = "trans 1"
t0.parent_account = a0
t1.parent_account = a1
try! realm.write {
realm.add([t0, t1])
}

写入数据后,如果您希望交易parent_account的有效属性 == 'true'

let results = realm.objects(Transaction.self).filter("parent_account.valid == 'true'")
for account in results {
print(account.desc)
}

输出为

Optional("trans 0")

请记住,这是非常非常基本的,可能不适用于您的用例。调查 LinkingObjects 和反向关系可能是一个更好的解决方案,但这应该会让你继续前进。

哦。。。可能使活动属性成为布尔值会比字符串更好。

最新更新