领域按其属性

时间:2015-06-23 09:32:09

标签: ios swift database realm

我正在使用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< ...>)我应该实现这种行为?

1 个答案:

答案 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)")
    }