我正在使用Swift开发iOS应用程序,并选择Realm作为它的数据库解决方案。我问one question about 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?
我有一个类(Person)包含另一个类(Car)的任意数量的对象。与人“联系”的汽车在该人的背景下具有一些属性(对于不同的人或对于一个人的两个类似的汽车,它们可以是不同的。使用List< ...>()我们无法为每个Item存储这样的属性,对不对?
如果我们仅将Car用于一个Person,并且只有一次我们可以创建另一个仅包含Cars的附加属性的类,并将它们与ID的ID加上Car的ID链接。但是如果我们有两个具有不同附加属性的类似汽车,它就不起作用。
那么,我如何看待解决方案。有一个表(类)存储Person的ID,一个Car的ID以及此Car的其他属性。对于同一个人的另一辆车,它具有相同的人员ID,车辆ID(相同或不同)以及此车辆实例的其他附加属性。
存在问题(我的意思是问题)。拥有该结构我希望查询该表中的所有汽车及其附加属性,其中Person ID等于some_id 。我该怎么做?或者也许是另一种结构(可能使用List< ...>)我应该实现这种行为?
答案 0 :(得分:4)
究竟是什么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)'")
已修改为已更新的问题
您的解决方案是创建表类,其中包含“人物”。 ,&#39; Car&#39;和&#39;上下文属性&#39;。
你的模型会是这样的
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)")
}