通过其 属性 领域查询对象 属性 字段

Realm query Object property field by its property

我正在使用 Swift 为 iOS 开发一个应用程序,并选择 Realm 作为它的数据库解决方案。我问了,现在我有另一个。

假设我们有这样一个架构:

class Person: Object {
    dynamic var id: String = NSUUID().UUIDString
    dynamic var name: String?
    dynamic var cars: Car?

class Car: Object {
    dynamic var name: String?

我有一个 class(人),其中包含另一个 class(汽车)的任意数量的对象。与此人 "linked" 的汽车在该人的上下文中具有某些属性(对于不同人的同一辆车或一个人的两辆相似的汽车,它们可能不同)。使用 List<...>() 我们不能为每个项目存储这样的属性,对吗?

如果我们只对一个人使用 Car,并且只使用一次,我们可以创建另一个 class,它只包含 Cars 的附加属性,并将它们与 Person 的 ID 和 Car 的 ID 链接起来。但如果我们有两辆具有不同附加属性的相似汽车,它就不起作用了。

那么,我是如何看待解决方案的。有一个 table (class) 存储人的 ID、一辆车的 ID 和这辆车的其他属性。对于同一个人的另一辆汽车,它具有相同的个人 ID、汽车 ID(相同或不同)以及此汽车实例的其他附加属性。

有一个问题(我的意思是一个问题)。有了这个结构,我希望 查询 table 中的所有汽车,其附加属性的人员 ID 等于 some_id。我应该怎么做?或者我应该用什么其他结构(也许使用 List<...>)来实现这种行为?

FastList 到底是什么?

如果您希望 Items 拥有 属性 个 Lists 集合。

您必须重新定义您的 Realm 模型。像这样。

class Car:Object{
    dynamic var createDate: NSDate = NSDate()
}
class Person:Object{
    let cars = List<Car>()
}

并像这样通过谓词查询

let realm = Realm()
var ownedCarsFilterByDate = realm.objects(Person).filter("ANY cars.createDate = '\(date)'")

已编辑更新问题

您的解决方案是创建 table class,其中包含 'Person'、'Car' 和 'Context Attribute'。

你的模型应该是这样的

class PersonAndCarRelation:Object{

    dynamic var person: Person?
    dynamic var car: Car?
    dynamic var contextAttribute = ""

}

并且你可以查询与人关联的所有汽车

    let personID = "123456789"
    let personAndCarArray = realm.objects(PersonAndCarRelation).filter("person.id == \(personID)")
    for personAndCar in personAndCarArray{
        let personName = personAndCar.person.name
        let carName = personAndCar.car.name
        let context = personAndCar.contextAttribute
        println("I am \(personName). I have a \(carName) with \(context)")
    }