通过其 属性 领域查询对象 属性 字段
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)")
}
我正在使用 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)")
}