Realm.io API 自动映射父对象

Realm.io API mapping parent object automatically

我在引用父模型的子模型上使用 Realm 及其 REST API's mapping method to map JSON data to my models and their child relationships automatically. It works great, except when I add in a "To-One" 关系。映射完全失控并创建了不存在的其他条目。

父模型:

class Foo: Object {
  dynamic var id = 0
  dynamic var title = ""
  let bars = List<Bar>() // Children

  override class func primaryKey() -> String {
    return "id"
  }
}

子模型:

class Bar: Object {
  dynamic var id = 0
  dynamic var title = ""
  dynamic var foo = Foo() // Reference to parent

  override class func primaryKey() -> String {
      return "id        
  }
}

根据 documentation 我正在使用便捷方法映射 JSON:

let foos = JSON["foos"] as! [NSDictionary]
  let realm = Realm()
  realm.write {
    for foo in foos {
      realm.create(Foo.self, value: foo, update: true)
    }
  }

我知道我可以手动设置映射,但我想尽可能使用便捷方法。有人知道如何设置吗?

我认为您最好使用 Inverse Relationships 作为 ToOne 关系。 Foo class 将是相同的。但是您将在 Bar class 中更改 foo 属性,如下所示。

    class Bar: Object {
        dynamic var id = 0
        dynamic var title = ""
       //dynamic var foo = Foo() // Reference to parent
        dynamic var foo: FOO {
        // Realm doesn't persist this property because it only has a getter defined
        // Define "foo" as the inverse relationship to Foo.bars
        return linkingObjects(Bar.self, forProperty: "bars").first as! Foo
       }

      override class func primaryKey() -> String {
          return "id        
      }
   }

Ismail 的回答是正确的,我对此投了赞成票:Realm 的查询引擎仅适用于数据库中保存的属性。如果您想添加持久反向链接 属性,您必须自己设置。

例如:

let foos = JSON["foos"] as! [NSDictionary]
let realm = Realm()
realm.write {
  for foo in foos {
    let persistedFoo = realm.create(Foo.self, value: foo, update: true)
    for bar in persistedFoo.bars {
      bar.foo = foo
    }
  }
}