鉴于以下数据模型,是否有办法在不更新(现有)子对象的情况下更新或设置子关系?
数据模型
class Person: Object {
dynamic var id = 0
dynamic var dog: Dog?
override static func primaryKey() -> String? {
return "id"
}
}
class Dog: Object {
dynamic var id = 0
dynamic var name = ""
override static func primaryKey() -> String? {
return "id"
}
}
代码
let realm = Realm()
// query existing dog
let existingDog = realm.objectForPrimaryKey(Dog.self, key: 42)
print(existingDog) // id: 42, name: Rex
// create new dog and person
let newDog = Dog(value: ["id": 42, "name": "Pluto"])
let person = Person()
realm.write {
// this shouldn't update the existing dog
// i.e. the name of the dog with id: 42 in the database should still be "Rex"
person.dog = newDog
realm.add(person, update: true)
}
我也试图通过realm.create
做到这一点,但也没有成功。有什么想法吗?
答案 0 :(得分:3)
Dog class
中的id属性是primaryKey。主键的目的是将数据库中的条目标记为唯一。因此,如果使用相同的主键创建对象,则将覆盖具有主键的数据库中的任何现有数据。
我不明白,你究竟想要实现什么,但你的Dog Table没有理由让多个具有相同主键的对象。这不是关系数据库的工作方式。
如果你需要一只名为Pluto的Dog和一只名为Rex且具有相同id值的Dog,那么应该创建一个不唯一的新属性( - >未标记为主键)。